Javascript 如何用另一个数组从一个数组中减去多个对象

Javascript 如何用另一个数组从一个数组中减去多个对象,javascript,arrays,Javascript,Arrays,我试图减去,即移除多个对象,即array1中的array2对象,这样最终结果是array2只包含“jean”对象 救命啊!我迷路了 我尝试了多次代码,如下面的示例,但都不起作用。 array1=[{“caracname”:“charles”},{“caracname”:“kevin”}] array2=[{“caracname”:“charles”},{“caracname”:“kevin”},{“caracname”:“jean”}] 数组1.forEach(函数(k){ 删除阵列2[k];

我试图减去,即移除多个对象,即array1中的array2对象,这样最终结果是array2只包含“jean”对象

救命啊!我迷路了

我尝试了多次代码,如下面的示例,但都不起作用。
array1=[{“caracname”:“charles”},{“caracname”:“kevin”}]
array2=[{“caracname”:“charles”},{“caracname”:“kevin”},{“caracname”:“jean”}]
数组1.forEach(函数(k){
删除阵列2[k];
});

控制台日志(array2)以下是如何做到这一点:

function objectsEqual(o1, o2) {
    return o1.caracname === o2.caracname
}

function subtractArrays(a1, a2) {
    var arr = [];
    a1.forEach((o1) => {
       var found = false;
       a2.forEach((o2) => {
           if (objectsEqual(o1, o2)) {
                found = true;
           }  
       });
       if (!found) {
           arr.push(o1);
       }
    })
    return arr;
}

console.log(subtractArrays(array2, array1));

在plunker中修复:

使用此代码:[由@slevy1建议]

var array1= [{"caracname" : "charles"}, {"caracname" : "kevin"}]
var array2= [{"caracname" : "charles"}, {"caracname" : "kevin"}, {"caracname" : "jean"}]

array1.forEach(function (k) {
    var index = array1.valueOf(k);
    array2.splice(index, 1);
});

array2.forEach(function (o) {
    console.log(o.caracname);
});

事实证明,删除数组元素不像删除变量那么容易;看见“deleted”元素不会被删除,但会获取一个未定义的值,而数组的长度保持不变

我找到了一些有用的建议。因此,您可以使用array2的方法,该方法可以方便地执行以下操作:

splice()方法通过删除 现有元素和/或添加新元素

以下代码段的工作方式与每个数组中元素的顺序无关,如下所示:

var arr1=[{
“caracname”:“charles”
}, {
“caracname”:“kevin”
}];
var arr2=[{
“caracname”:“charles”
}, {
“caracname”:“jean”
}, {
“caracname”:“kevin”
}];
var tmp1=“”,
tmp2=“”;
对于(var k=0,key=”“,maxLength=arr1.length;k控制台日志(arr2)使用以下库更容易一些:

var array1=[{“caracname”:“charles”},{“caracname”:“kevin”}];
var array2=[{“caracname”:“charles”},{“caracname”:“kevin”},{“caracname”:“jean”}];
var array3=与(array2,array1,u0.isEqual)的差值;
log(JSON.stringify(array3));
//或
_.pullAllWith(array2,array1,u.isEqual);
log(JSON.stringify(array2))

console.log的可能重复显示未定义:修复并添加了plunkerI在此处运行了您的代码,但未获得预期结果。您好@slevy1,感谢您的努力。我已经编辑(修复)了我的代码,它现在可以工作了。请重新测试bro。@Fatih
索引
不是一个数字(请尝试
console.log(index)
),而array2.splice只删除第一个item@Fatih事实上,你的代码确实有效,所以我投你一票。我在运行您的代码时做了一些更改,即您的数组应该使用var或let声明。其次,我将匿名函数的参数“k”改为“o”,以提醒用户该参数是一个对象。谢谢@slevy1的建议。“正确”的对象比较并不容易(这就是为什么我在回答中没有尝试它,只是比较了它们的JSON字符串表示,而Nayish只比较了caracname属性的值)。在TypeScript或类似编辑器中粘贴JavaScript可能有助于注意一些问题(不确定是否将Object.keys中的数组用作字符串
[key]
is intential)@Slai感谢您提供的这些信息。我修复了代码,现在var key保存了一个字符串值。测试了代码,现在在Typescript网站上运行时,它看起来还不错。