我有list
一组guid
值,这些值与guid
的{{1}}相匹配。
如果people
的值为list
,则下面的代码应该找到
'c7835c96-8dcc-b6e2-e452-494fe4d5fbc5'
并将其从数组{
'guid': 'c7835c96-8dcc-b6e2-e452-494fe4d5fbc5',
'name': 'Stan Marsh'
}
以及people
中删除。
我遇到的问题是脚本似乎在第一个项目后停止,我无法弄清楚如何再次循环以删除list
中的下一个项目。
list
答案 0 :(得分:1)
如果您只想删除与guid匹配的项目,可以使用 filter ,如下所示:
ButtonTwo
和其他数组类似:
Products.update({
_id: product_id,
'template.additionalFields': {
$elemMatch: {
_id: field._id
}
}
}, {
$set: {
'template.additionalFields.$.content': update
}
});
删除列表中包含的项目:
var guid = 'c7835c96-8dcc-b6e2-e452-494fe4d5fbc5';
var people = people.filter(function(item) {
return item.guid !== guid;
})
console.log(people);
答案 1 :(得分:0)
我建议将代码更改为以下内容:
list = list.filter(function(val) {
var index = arrayObjectIndexOf(people, val, 'guid');
if (index !== -1) {
people.splice(index, 1);
}
return index == -1;
});
原始代码的问题在于,正如Zoltán评论的那样,它在迭代时修改了列表,所以在第二个 迭代,过滤函数决定它已经遍历了所有项目,因为它取决于项目[1],并且数组的长度现在只有1。
不需要手动修改列表,因为filter会返回一个包含回调项的新数组 返回true,所以我们只需要在 not 找到项目时返回true,并将过滤器的结果分配回列表。
另一个问题是即使找不到项目也会执行拼接(使用start参数调用splice将-1从数组中删除最后一项)。