2016-05-02 2 views
1

オブジェクト値の名前で配列の重複オブジェクトをフィルタリングし、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); 
+0

私はあなたのコードにいくつかの変更を加えたし、私の答え – Mojtaba

答えて

2

Array#filterでデータをフィルタリングし、既に挿入された項目にオブジェクトを使用することができますs。

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>');

+1

共有ストレージとして空のオブジェクトを提供するために、うわー、素敵なアイデアを更新しました。 –

+1

@Nina Scholz、ありがとう!私は多くの頭痛を救った:) –

1

あなたはすでにそれを行っ。ただ、単純なミス:

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);

+0

うわー、おそらく私のコンピュータから少し離れていると考えられるべきである。それを指摘していただきありがとうございます。 –

+0

@TravisMichaelHeller、Yea。時には休憩が必要で、脳を新鮮にする – Mojtaba

関連する問題