比较两个对象数组,只得到数组的不同属性

Compare two array of objects and get only the different Property of the array

本文关键字:数组 属性 两个 比较 对象      更新时间:2023-09-26
Array1 = { "Name": "Max", "Occupation": "Agri", "Location": "KGP" }; 
Array2 = { "Name": "Alex", "Occupation": "S.E", "Location": "KGP" }; 

在上面给定的两个数组中,i的属性Name和Occupation的值不同,但location的值与Array1的值相同,

我想比较两个数组,只得到不同的属性(名称和职业)的Array1

您可以遍历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);

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));

你的Array1和Array2是JavaScript对象。对于2个对象,您可以执行这种工作,但肮脏的比较。一旦你有了更多的财产……这会很乱的。

   var result = {};
    if (Array1.Name !== Array2.Name)
       result.Name = Array1.Name;
    if (Array1.Occupation !== Array2.Occupation)
       result.Occupation = Array1.Occupation.
   return result;
JavaScript中的

数组用以下语法声明:

var Array1 = [];

如果你想要一个对象数组,你可以这样写:

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

但我怀疑这是你的意图。

如果目标是获得不匹配的键,您可以尝试这样做:

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));

我将假设Array1和Array2是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>