如何根据javascript中的键名比较两个JSON值?

时间:2015-12-05 13:23:07

标签: javascript arrays json

我有两个JSON数组,比如

array1=[{a:1,b:2,c:3,d:4}]
&
array2=[{a:2,b:5,c:3,d:4}]

是否有任何方法可以找到数组2中array1中其中一个键的值。在数组1中,键b包含值2,而array2也包含值为2的键a。如何捕获数组2的键名,对于数组中的一个键具有相同的值。

3 个答案:

答案 0 :(得分:0)

我不太明白你是否有兴趣对数组或对象进行操作 - 因为你的例子是一对单个元素数组,并且数组中的对象之间的比较很明显。

那就是说,如果你的目标是比较两个对象,并返回两者相同的一组键,你会做类似的事情

obj1 = {a:1,b:2,c:3,d:4};
obj2 = {a:2,b:5,c:3,d:4};

function sameKeys(a,b) {
    return Object.keys(a).filter(function(key) {
        return a[key] === b[key];
    });
}

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

当我跑步时,我得到:

[ 'c', 'd' ]

我希望这就是你所要求的......

答案 1 :(得分:0)

写了一个原型函数来比较一个对象与另一个对象。

var obj1 = {a: 1, b: 2, c: 3, d: 4};
var obj2 = {a: 2, b: 4, c: 100, d: 200}


Object.prototype.propertiesOf = function(visitorObj) {

   result = {};

   //Go through the host object 
   for (thisKey in this) {

        //Exclude this function
        if (!this.hasOwnProperty(thisKey))
          continue;

        //Compare the visitor object against the current property
        for (visitorKey in visitorObj) {
           if (visitorObj[visitorKey] === this[thisKey])
              result[visitorKey] = thisKey;               
      }   
   } 

  return result;

}

console.log(obj1.propertiesOf(obj2));

通过传递另一个对象作为参数,简单地调用任何对象的propertiesOf函数。它返回一个具有相似键的对象。

以上示例将导致:

{a: "b", b: "d"}

答案 2 :(得分:0)

看起来你想要这样的东西:创建一个函数,找到第二个对象中具有给定值的所有键。然后将第一个对象的值传递给该函数。

obj1={a:1,b:2,c:3,d:4};
obj2={a:2,b:5,c:3,d:4};
function findKeysByValue(obj, v) {
    var results = [];
    for (var k in obj) {
        if (obj.hasOwnProperty(k) && v == obj[k]) {
            results.push(k);
        }
    }
    return results;
}
console.log(findKeysByValue(obj2, obj1['b']));   // ['a']