Javascript 如何用另一个数组从一个数组中减去多个对象
我试图减去,即移除多个对象,即array1中的array2对象,这样最终结果是array2只包含“jean”对象 救命啊!我迷路了 我尝试了多次代码,如下面的示例,但都不起作用。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=[{“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网站上运行时,它看起来还不错。