2016-06-14 1 views
-2

私の場合、2つの配列をマッピングし、自分のコードで新しい配列を作成するためにどのように私は2つの配列をマッピングしようとしています

私は

var array1 =[ 
    {'name':'John' 
    'id': '1'}, 
    {'name':'Ted' 
    'id': '2'}, 
    {'name':'KK' 
    'id': '3'} 
]; 
var array2 =[1, 2]; 

var info = [];  

for (var i = 0; i <array2.length; i++){ 
    var id = array2[i]; 
    var p = array1.filter(function(person){ 
      return id === person.id 
    }) 

    info.push(p) 
} 

私が望むような何かが私のinfo配列は、ジョンとが含まれている必要がありテッド

[ 
    {'name':'John' 
    'id': '1'}, 
    {'name':'Ted' 
    'id': '2'} 
] 

などの代わりに、私は

[ 
    [ 
     {'name':'John' 
     'id': '1'} 
    ], 
    [ 
     {'name':'Ted' 
     'id': '2'} 
    ] 
] 
を得ました

私は何が間違っているのか分かりません。とにかく私のコードを改善してより充実していますか?どうもありがとう!

+0

あなたはコードを修正する必要があります – j08691

+0

あなたのコードは裏返しです。 'filter'内で' array2'をループするか、 'indexOf'や' some'を使うのが良いでしょう。 – 1983

答えて

1

filterから取得したpは既に配列であるため、pushではなくconcatとする必要があります。だから、変更:

info.push(p) 

へ:

info = info.concat(p) 

は、第二に、あなたは数字と文字列を比較しているので、変更します。

var array2 = [1, 2]; 

へ:

var array2 = ['1', '2']; 

または、変更idの値数字。 info配列に各人物オブジェクトを

var array1 =[ 
 
    {'name':'John', 'id': 1}, 
 
    {'name':'Ted', 'id': 2}, 
 
    {'name':'KK', 'id': 3} 
 
]; 
 
var array2 = [1, 2]; 
 
var info = array1.filter(function (person) { 
 
    return array2.indexOf(person.id) !== -1; 
 
}); 
 
console.log(info);

+0

ありがとうが、concatはそれをしないようです。情報が空の配列になりましたconcat +1 tho – FlyingCat

+0

'return id === person.id'を' return id == person.id'に変更します – AbM

+0

@abMはまだ動作しません – FlyingCat

1

あなたはpをプッシュしている、ではなく、次のスニペットはそれを行い、また、コードより簡潔Array.prototype.indexOfの使用となります。さらに、構文エラーがあります。 @trincot answerには、他のコーディングエラーがいくつかあります。

var array1 =[ 
    {name: 'John', id: 1}, 
    {name: 'Ted', id: 2}, 
    {name: 'KK', id: 3} 
], array2 = [1, 2]; 

var info = []; 
for (var i = 0, b = array2.length; i < b; i++) { 
    var id = array2[i]; 
    array1.filter(function(person) { 
     if(id === person.id) { 
      info.push(person); 
      return true; // breaks the filter 
     } 
    }); 
} 
関連する問題