[英]How to Subtract Multiple Objects from an Array with Another array
我試圖減去,即刪除多個對象,即在array1中找到的array2對象,以便最終結果是array2僅包含“ jean”對象。
救命! 我迷路了。
我像下面的示例一樣嘗試了多次代碼,但沒有成功。
array1= [{"caracname" : "charles"}, {"caracname" : "kevin"}] array2= [{"caracname" : "charles"}, {"caracname" : "kevin"}, {"caracname" : "jean"}] array1.forEach(function (k) { delete array2[k]; }); console.log(array2);
var array1 = [{"caracname" : "charles"}, {"caracname" : "kevin"}]; var array2 = [{"caracname" : "charles"}, {"caracname" : "kevin"}, {"caracname" : "jean"}]; var array3 = _.differenceWith(array2, array1, _.isEqual); console.log( JSON.stringify(array3) ); // or _.pullAllWith(array2, array1, _.isEqual); console.log( JSON.stringify(array2) );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
沒有庫的替代方法效率較低(對於具有多個屬性的對象可能不起作用):
var array1 = [{"caracname" : "charles"}, {"caracname" : "kevin"}]; var array2 = [{"caracname" : "charles"}, {"caracname" : "kevin"}, {"caracname" : "jean"}]; var j = JSON.stringify, array3 = array2.filter(e => array1.map(j).indexOf(j(e)) < 0); console.log( j(array3) );
這是操作方法:
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));
已修復在插件中: https ://plnkr.co/edit/vA6oWg9R44f6k7ylyFh6 ? p = preview
事實證明,刪除數組元素並不像刪除變量那樣容易。 看這里 。 “已刪除”元素不會被刪除,但是會在數組長度保持不變的情況下獲取未定義的值。
在這里找到了一些有用的建議。 因此,您可以使用array2的splice方法,根據MDN可以方便地執行以下操作:
splice()方法通過刪除現有元素和/或添加新元素來更改數組的內容。
不管每個數組中元素的順序如何,以下代碼段的工作方式如下:
var arr1 = [{ "caracname": "charles" }, { "caracname": "kevin" }]; var arr2 = [{ "caracname": "charles" }, { "caracname": "jean" }, { "caracname": "kevin" }]; var tmp1 = "", tmp2 = ""; for (var k = 0, key = "", maxLength = arr1.length; k < maxLength; k++) { key = Object.keys(arr1[k])[0]; for (var j = 0, maxLength_2 = arr2.length; j < maxLength_2; j++) { tmp2 = arr2[j][key]; tmp1 = arr1[k][key]; if (tmp2 === tmp1) { arr2.splice(j, 1); maxLength_2--; // array2 length now one less break; }// end if }// end inner-for }// end outer-for console.log(arr2);
我在這里運行代碼后修改了此示例,因此更改了一些變量名稱。
使用此代碼:[由@ 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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.