的第一陣列我在javascript得到從陣列元件,其不處於物體
var arr1 = [{'a':'1'},{'b':'2'},{'c':'3'}];
var arr2 = [{'a':'1'},{'b':'2'},{'d':'4'}];
我想從ARR2這不是在ARR1的元件對象的兩個數組。 我的輸出將是[{'d':'4'}]
的第一陣列我在javascript得到從陣列元件,其不處於物體
var arr1 = [{'a':'1'},{'b':'2'},{'c':'3'}];
var arr2 = [{'a':'1'},{'b':'2'},{'d':'4'}];
我想從ARR2這不是在ARR1的元件對象的兩個數組。 我的輸出將是[{'d':'4'}]
是來到我的腦海裏,最簡單的方法是透過JSON.stringify:
var arr1 = [{'a':'1'},{'b':'2'},{'c':'3'}];
var arr2 = [{'a':'1'},{'b':'2'},{'d':'4'}];
stringArr1 = JSON.stringify(arr1);
var result = arr2.filter(
obj => !~stringArr1.indexOf(JSON.stringify(obj))
);
console.log(result);
但應該有更好的方式。
的等效:
var result = arr2.filter(
obj => !~stringArr1.indexOf(JSON.stringify(obj))
);
是常見的:
var result = arr2.filter(function (obj) {
var stringObj = JSON.stringify(obj);
if (stringArr1.indexOf(stringObj) != -1)
return true;
else
return false;
});
的招數很簡單,基本上你需要知道的三兩件事:
希望它能幫助:)
如果你不介意可以解釋'obj =>!〜stringArr1.indexOf(JSON.stringify(obj))'這一行並告訴我使用「〜」。 – Kallis
您可以使用$.grep()
,.every()
,Object.keys()
var arr1 = [{'a':'1'},{'b':'2'},{'c':'3'}];
var arr2 = [{'a':'1'},{'b':'2'},{'d':'4'}];
var res = $.grep(arr2, function(v) {
return arr1.every(function(_v) {
var keys = [Object.keys(v)[0], Object.keys(_v)[0]];
return keys[0] !== keys[1] && v[keys[0]] !== _v[keys[1]]
})
});
console.log(res)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
如果我使用其他對象,未捕獲TypeError:arr1.every是不是函數 – Kallis
_「如果我使用其他對象」_你是什麼意思的「其他對象」?你可以創建一個jsfiddle http://jsfiddle.net來演示嗎? – guest271314
我使用其他數據而不是「arr1」和「arr2」數據 – Kallis
您可以使用JSON.stringify
的陣列中的每個元素,並使用哈希表檢查
var arr1 = [{ 'a': '1' }, { 'b': '2' }, { 'c': '3' }],
arr2 = [{ 'a': '1' }, { 'b': '2' }, { 'd': '4' }],
arr3,
hash = Object.create(null);
arr1.forEach(function (o) {
hash[JSON.stringify(o)] = true;
});
arr3 = arr2.filter(function (o) {
return !hash[JSON.stringify(o)];
});
console.log(arr3);
的可能的複製[JavaScript數組差(http://stackoverflow.com/questions/1187518/javascript-array-difference) –
是這項工作對象數組? – Kallis
'arr2'中的元素都不在'arr1'中,它們都不一樣? – adeneo