【发布时间】:2018-12-04 16:03:18
【问题描述】:
我有两个对象数组,我想将第一个数组的对象与第二个数组的对象进行比较。如果它们匹配,我使用splice 从第二个数组中删除对象。
我有以下代码
existing.forEach((existingitem, existingindex, existingfeatures) => {
(newdatafeat.features).forEach((newitem, newindex, newfeatures) => {
console.log('existing index-name --- new index-name', existingindex ,' - ',existingitem.values_.name,' - ',newindex,' - ',newitem.properties.name,'-----');
if (existingitem.values_.id == newitem.properties.id && existingitem.values_.cat == newitem.properties.cat){
console.log(' index to remove - ', newindex); (newdatafeat.features).splice(newindex,1);
}
})
});
所以,如果existing 是
var existing= [
{ info: true, values_:{id:1, cat:true, name : "John"} },
{ info : true, values_:{id:2, cat:false, name : "Alice"} }
];
而newdatafeat.features 是
var newdatafeat= {
status:scanned,
features : [ { info: true, properties:{id:1, cat:true, name : "Mike"} },
{ info : false, properties:{id:22, cat:false,name : "Jenny"} } ]
};
那么,来自newdatafeat.features 的 Mike 应该被移除。
错误是newdatafeat.features数组中索引为0的每一项都没有被删除。在循环中,我可以看到 index to remove - 0,但 Mike 从未被移除。我知道,因为如果我在循环之后console.log newdatafeat.features,Mike 就在那里
这是在 angular6 代码中。
我在这里缺少什么?
谢谢
【问题讨论】:
-
@charlietfl 是的,“Mike”有
id:1, cat:true,就像来自existing的“John”。 id 和 cat 匹配,因此必须删除 Mike。我只比较 id 和 cat,而不是名称。再次检查if语句。谢谢
标签: javascript arrays angular6 array-splice