使用javascript删除与对象的另一个键和值对相对应的对象数组中的重复项

问题描述 投票:0回答:2

具有一个对象数组,对象具有两个键和值对。

[{fruit:"apple",locale:"US"},
{fruit:"orange",locale:"US"},
{fruit:"banana",locale:"US"},
{fruit:"apple",locale:"US"},
{fruit:"orange",locale:"IT"},
{fruit:"apple",locale:"IT"},
{fruit:"banana",locale:"IT"},
{fruit:"orange",locale:"IT"}
{fruit:"apple",locale:"IT"}]

如何实现水果在同一地区不得重复,水果在不同的区域可以相同。

javascript arrays javascript-objects keyvaluepair
2个回答
1
投票

您可以通过匹配当前迭代的索引值来过滤出对象。像这样的东西:

var data=[{fruit:"apple",locale:"US"},{fruit:"orange",locale:"US"},{fruit:"banana",locale:"US"},{fruit:"apple",locale:"US"},{fruit:"orange",locale:"IT"},{fruit:"apple",locale:"IT"},{fruit:"banana",locale:"IT"},{fruit:"orange",locale:"IT"},{fruit:"apple",locale:"IT"}];

var result = data.filter((e,i,self)=>self.findIndex(k=>k.fruit==e.fruit && k.locale==e.locale)==i);

console.log(result);

或者您可以使用Map

var data=[{fruit:"apple",locale:"US"},{fruit:"orange",locale:"US"},{fruit:"banana",locale:"US"},{fruit:"apple",locale:"US"},{fruit:"orange",locale:"IT"},{fruit:"apple",locale:"IT"},{fruit:"banana",locale:"IT"},{fruit:"orange",locale:"IT"},{fruit:"apple",locale:"IT"}];

var result = [...new Map(data.map(k=>[`${k.fruit}|${k.locale}`, k])).values()];

console.log(result);
 

1
投票

尝试一下..

    obj = [{fruit:"apple",locale:"US"},
        {fruit:"orange",locale:"US"},
        {fruit:"banana",locale:"US"},
        {fruit:"apple",locale:"US"},
        {fruit:"orange",locale:"IT"},
        {fruit:"apple",locale:"IT"},
        {fruit:"banana",locale:"IT"},
        {fruit:"orange",locale:"IT"}
        {fruit:"apple",locale:"IT"}]

        const uniqueArray = this.obj.filter((item, index) => {
          const temp = JSON.stringify(item);
          return index === this.obj.findIndex(obj => {
          return JSON.stringify(obj) === temp;
          });
        });

        console.log(uniqueArray);
© www.soinside.com 2019 - 2024. All rights reserved.