按值名称过滤掉重复的对象,并将其放入新数组中

filter out duplicate objects by value name and place into new array

本文关键字:新数组 数组 过滤 对象      更新时间:2023-09-26

我正试图按对象值名称过滤掉数组中重复的对象,并将其放入名为finalResult的新数组中。

基本上,我只想在我的新数组中有具有唯一国家名称的对象。

示例阵列:

var result = [
   {country: 'united states', numofdistributors: 5},
   {country: 'united states', numofdistributors: 5},
   {country: 'brazil', numofdistributors: 2},
   {country: 'Germany', numofdistributors: 1},
   {country: 'india', numofdistributors: 6},
   {country: 'united states', numofdistributors: 5},
   {country: 'Egypt', numofdistributors: 1},
   {country: 'Germany', numofdistributors: 1},
];

这就是我希望我的数组变成的样子:

var finalResult = [
   {country: 'united states', numofdistributors: 5},
   {country: 'brazil', numofdistributors: 2},
   {country: 'Germany', numofdistributors: 1},
   {country: 'india', numofdistributors: 6},
   {country: 'Egypt', numofdistributors: 1},
];

以下是我试图解决的问题,没有运气,只有挫折:

var finalResults = [];
result.forEach(function(country){
    if(finalResults.indexOf(country.country) != -1){
        console.log('already added');
    }else {
       //console.log('Does not exist');
       finalResults.push(country);
});
console.log(finalResults);

您可以使用Array#filter过滤数据,并对已插入的项使用对象。

var result = [{ country: 'united states', numofdistributors: 5 }, { country: 'united states', numofdistributors: 5 }, { country: 'brazil', numofdistributors: 2 }, { country: 'Germany', numofdistributors: 1 }, { country: 'india', numofdistributors: 6 }, { country: 'united states', numofdistributors: 5 }, { country: 'Egypt', numofdistributors: 1 }, { country: 'Germany', numofdistributors: 1 }, ],
    finalResult = result.filter(function (a) {
        var key = a.country + '|' + a.numofdistributors;
        if (!this[key]) {
            this[key] = true;
            return true;
        }
    }, Object.create(null));
document.write('<pre>' + JSON.stringify(finalResult, 0, 4) + '</pre>');

你已经完成了。只是一个简单的错误:

var result = [
   {country: 'united states', numofdistributors: 5},
   {country: 'united states', numofdistributors: 5},
   {country: 'brazil', numofdistributors: 2},
   {country: 'Germany', numofdistributors: 1},
   {country: 'india', numofdistributors: 6},
   {country: 'united states', numofdistributors: 5},
   {country: 'Egypt', numofdistributors: 1},
   {country: 'Germany', numofdistributors: 1},
];
var finalResult = [
   {country: 'united states', numofdistributors: 5},
   {country: 'brazil', numofdistributors: 2},
   {country: 'Germany', numofdistributors: 1},
   {country: 'india', numofdistributors: 6},
   {country: 'Egypt', numofdistributors: 1},
];
var finalResults = [];
var countries = [];
result.forEach(function(country){
    if(countries.indexOf(country.country) != -1){
        console.log('already added');
    }else {
       //console.log('Does not exist');
       finalResults.push(country);
       countries.push(country.country);
}
}
);
console.log(finalResults);