Я пытаюсь получить каждый объект массива и сравнить его с объектами другого массива.Если они совпадают, удалите объект из второго массива.
Странно то, что если объект обнаружен в массиве два раза, этот объект не фильтруется.
Я хочу сравнить newdata
с existing
.Если объект newdata
имеет одинаковые id и cat, он не будет в новом массиве.
existing
равно
var existing = [{
name: "John",
values_: {
id: 5,
cat: true
}
},
{name: "Jake",
values_: {
id: 3,
cat: true
}
},
{
name: "Alice",
values_: {
id: 2,
cat: false
}
}
];
newdata
равно
var newdata = [{
name: "Mike",
properties: {
id: 1,
cat: true
}
},
{name: "Jake",
properties: {
id: 3,
cat: true
}
},
{name: "Jake",
properties: {
id: 3,
cat: true
}
},
{
name: "Alice",
properties: {
id: 2,
cat: false
}
}
];
, а мой фильтр
existing.forEach((existingitem, existingindex, existingfeatures) => {
newdata2 = newdata.filter(item => (
existingitem.values_.id != item.properties.id &&
existingitem.values_.cat != item.properties.cat
));
});
console.log('newdata2 - ',newdata2);
Логикаnewdata2
иметь только Mike
.Проблема в том, что я вижу Jake
два раза.Jake
не должно быть там, оно уже в existing
.
Если я отредактирую newdata
примерно так (без двойных чисел)
var newdata = [{
name: "Mike",
properties: {
id: 1,
cat: true
}
},
{name: "Jake",
properties: {
id: 3,
cat: true
}
} ,
{
name: "Alice",
properties: {
id: 2,
cat: false
}
}
];
Я все еще вижу Jake
в newdata2
.Но почему?
Пожалуйста, помогите мне исправить это.Это мой фильтр или способ filter
работает?Исходя из критериев, я должен получить только Mike
в конце.Пожалуйста, совет.
Спасибо
var existing = [{
name: "John",
values_: {
id: 5,
cat: true
}
},
{name: "Jake",
values_: {
id: 3,
cat: true
}
},
{
name: "Alice",
values_: {
id: 2,
cat: false
}
}
];
var newdata = [{
name: "Mike",
properties: {
id: 1,
cat: true
}
},
{name: "Jake",
properties: {
id: 3,
cat: true
}
},
{name: "Jake",
properties: {
id: 3,
cat: true
}
},
{
name: "Alice",
properties: {
id: 2,
cat: false
}
}
];
existing.forEach((existingitem, existingindex, existingfeatures) => {
newdata2 = newdata.filter(item => (
existingitem.values_.id != item.properties.id &&
existingitem.values_.cat != item.properties.cat
));
});
console.log('newdata2 - ',newdata2);