我正在尝试映射两个数组并在我的代码中创建一个全新的数组
我有类似
的东西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
数组包含John和Ted,如
[
{'name':'John'
'id': '1'},
{'name':'Ted'
'id': '2'}
]
但相反,我得到了
[
[
{'name':'John'
'id': '1'}
],
[
{'name':'Ted'
'id': '2'}
]
]
我不确定我做错了什么。无论如何我可以改进我的代码更充分吗?非常感谢!
答案 0 :(得分:1)
您不应该push
而是concat
,因为您从p
获得的filter
已经是一个数组。所以改变:
info.push(p)
为:
info = info.concat(p)
其次,您要将字符串与数字进行比较,因此请更改:
var array2 = [1, 2];
为:
var array2 = ['1', '2'];
或,将id
值更改为数字。以下代码段可以做到这一点,并且使用Array.prototype.indexOf
使代码更简洁:
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);
&#13;
答案 1 :(得分:1)
您正在推送p
,但不是每个人都对info
数组。此外,您还有语法错误。 @trincot答案中记录了一些其他编码错误。
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
}
});
}