Javascript:对象的过滤器数组删除所有对象



我遇到了一个简单的问题,花了几个小时,却无法找到解决方案。我得到了一组物体。我想删除与我传递的变量具有相同值的对象。

我的问题是,它删除了所有对象,即使是那些与我的变量不相似的对象。

这是我的代码

function appSelect(variable) {
//we check if the object already exists in my array {id:x, value:y}
const found = myArray.find(obj => {
return (obj.id === variable.id && obj.value === variable.value);
});

if (found) { 
//If find it, I want to remove it from my array
const filtered = myArray.filter(obj => {
return (obj.id !== variable.id && obj.value !== variable.value);
})
//Return empty array
}

我从一个选择的表单中收到值。例如,我得到了myArray = [{id: 1, value: 12},{id: 2, value: 12},{id: 5, value: 12}]variable = {id: 2, value: 12}

我做错了什么?

原因是下面的代码:

return (obj.id !== variable.id && obj.value !== variable.value)

这意味着如果idvalue相同,那么它将被过滤。

您可以将其更改为

return !(obj.id === variable.id && obj.value === variable.value)

完整代码:

function appSelect(variable) {
//we check if the object already exists in my array {id:x, value:y}
const found = myArray.find(obj => {
return (obj.id === variable.id && obj.value === variable.value);
});

if (found) { 
//If find it, I want to remove it from my array
const filtered = myArray.filter(obj => {
return !(obj.id === variable.id && obj.value === variable.value);
})
//Return empty array
}

这是一个失败的德摩根定律。您需要与obj.id === variable.id && obj.value === variable.value相反的值,当应用DeMorgan定律时,!(obj.id === variable.id && obj.value === variable.value)obj.id !== variable.id || obj.value !== variable.value

const filtered = myArray.filter((obj) => {
return obj.id !== variable.id || obj.value !== variable.value;
});

如果其中一个值不同,那么它就不是同一个对象,请注意,第一次找到的检查是不必要的

function appSelect(variable, arr) {
return arr.filter(obj => (obj.id !== variable.id || obj.value !== variable.value))
}

您可以尝试以下代码:

const myArray = [
{ id: 1, value: 12 },
{ id: 2, value: 12 },
{ id: 5, value: 12 },
];
const variable = { id: 2, value: 12 };
function appSelect(variable) {
//we check if the object already exists in my array {id:x, value:y}
const found = myArray.find((obj) => {
return obj.id === variable.id && obj.value === variable.value;
});
if (found) {
//If find it, I want to remove it from my array
const filtered = myArray.filter((obj) => {
// if you found the object variable in your array then you return nothing
if (obj.id === variable.id && obj.value === variable.value) {
return;
}
// if the current object is not object variable then return it
return obj;
});
return filtered;
}
//Return empty array
return myArray;
}
console.log(appSelect(variable));

最新更新