2016-09-21 167 views
-4
Array1 = { "Name": "Max", "Occupation": "Agri", "Location": "KGP" }; 

Array2 = { "Name": "Alex", "Occupation": "S.E", "Location": "KGP" }; 

在上述給定的2個陣列我有在性質名稱和職業不同的值,但位置的具有相同的值作爲數組1的不同屬性,比較兩個陣列對象,並獲得只陣列

我想比較兩個數組,並只獲得Array1的不同屬性(名稱和職業)

+1

你能分享你試過嗎? – Rajesh

+0

「名稱」和「職業」是屬性。您正在尋找這些屬性的不同值。 –

+5

我只看到物體。 –

回答

1

您可以迭代object1的密鑰並檢查與object2的屬性的差異。如果不相等,則將值分配給結果object3的屬性。

var object1 = { "Name": "Max", "Occupation": "Agri", "Location": "KGP" }, 
 
    object2 = { "Name": "Alex", "Occupation": "S.E", "Location": "KGP" }, 
 
    object3 = {}; 
 

 
Object.keys(object1).forEach(function (k) { 
 
    if (object1[k] !== object2[k]) { 
 
     object3[k] = object1[k]; 
 
    } 
 
}); 
 

 
console.log(object3);

0

你的數組1和數組2是JavaScript Object。有了2個對象,你可以執行這個工作,但髒比較。只要你有更多的財產......這將是一個爛攤子。在JavaScript

var result = {}; 

    if (Array1.Name !== Array2.Name) 
     result.Name = Array1.Name; 
    if (Array1.Occupation !== Array2.Occupation) 
     result.Occupation = Array1.Occupation. 

    return result; 

數組聲明的語法如下:

var Array1 = []; 

如果你想對象的數組,你可以這樣寫:

var Array1 = [ { "Name": "Max", "Occupation": "Agri", "Location": "KGP" }, { b"Name": "Max", "Occupation": "Agri", "Location": "KGP"} ] 

但我懷疑這是你的意圖那裏。

+0

是的這是我的意圖 – Andy

+0

隨時糾正自己,但請注意,Nina Scholz和Vladu Ionut的答案更具適應性:他們可以使用您擁有的任何屬性,而不僅僅是使用「名稱」和「佔領」。我會建議你採取他們的代碼之一。 –

1
var obj1 = { "Name": "Max", "Occupation": "Agri", "Location": "KGP" }; 

var obj2 = { "Name": "Alex", "Occupation": "S.E", "Location": "KGP" }; 

function getDifference(obj1,obj2){ 
    var diff = []; 
    Object.keys(obj1).forEach(function(key){ 
    if (obj1[key] !== obj2[key]) diff.push(key); 
    }); 
    return diff; 
} 
console.log(getDifference(obj1,obj2)); 
0

如果目標是讓不匹配的密鑰,你可以嘗試這樣的事:

function getMismatchKeys(o1,o2){ 
 
    return Object.keys(o1).filter(function(k){ 
 
    return o1.hasOwnProperty(k) && o2.hasOwnProperty(k) && o1[k] !== o2[k] 
 
    }); 
 
} 
 

 
var obj1 = { "Name": "Max", "Occupation": "Agri", "Location": "KGP" }; 
 
var obj2 = { "Name": "Alex", "Occupation": "S.E", "Location": "KGP" }; 
 

 
console.log(getMismatchKeys(obj1, obj2));

0

我會假設數組1和數組2的意思是JSON對象和不是json數組。我還會假設你想要一個由Array1的鍵值對組成的結果對象,它們與Array2不同。鑑於這些假設,您可以使用lodash omitBy來解決您的問題。

var Array1 = { "Name": "Max", "Occupation": "Agri", "Location": "KGP" }; 
 
var Array2 = { "Name": "Alex", "Occupation": "S.E", "Location": "KGP" }; 
 
var result = _.omitBy(Array1, function(val, key){ return val === Array2[key];}); 
 
console.log('the key value pairs of Array1 that are different from Array2 are: ', result);
<script src="https://cdn.jsdelivr.net/lodash/4.16.1/lodash.min.js"></script>