filter()方法利用所有通过指定函数测试的元素创建一个新的数组,并返回。
注意:两个数组间的对比要用id,不用索引
栗子:
var arr = [{
id : 1,
name : 'use'
}, {
id : 2,
name : 'you zi'
}];
var getArrId = function(id) {
return arr.filter(function(objArr) {
return +objArr.id === id;
});
};
getArrId(2); //[{id: 2,name: "you zi"}]问题描述:在地图中有很多marker,数据中只有2条数据,当然这时地图中也有2个marker。当我从数据中删除1条数据的时候,bug就产生了,地图中还是有2个marker。这是为什么呢?因为代码中是用数组把marker存起来的,然后数据也是个数组,当数据更新的时候,并没有更新marker的数组。(估计这里很多人不知道说的是什么,因为我的描述有点问题)所以这时要实现数据同步,如果实现数据同步呢?代码如下:
var arrOne = [
{
id: 1,
word : 'e'
},{
id: 2,
word: 'l'
},{
id: 3,
word: 'l'
},{
id: 4,
word: 'y'
},{
id: 5,
word: '2'
}
];
var arrTwo = [
{
id: 1,
word : 'e'
},{
id: 2,
word: 'l'
},{
id: 3,
word: 'l'
},{
id: 4,
word: 'y'
}
];
var newArr = []; // 产生的新数组
arrOne.forEach(function(element, index) {
var arrOneId = +arrOne[index].id; // arrOne数组的id
arrTwo.forEach(function(ele, idx) {
var arrTwoId = +arrTwo[idx].id; // arrTwo数组的id
if(arrOneId === arrTwoId) {
newArr.push(ele.word); // 如果2个数组中有相同的id,就把它们存到新的数组中
}
});
});
console.log(newArr); // 新数组: ['e', 'l', 'l', 'y']