【问题标题】:How to compare two JSON values based on the key name in javascript?如何根据javascript中的键名比较两个JSON值?
【发布时间】:2015-12-05 13:23:07
【问题描述】:

我有两个 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 的键名,与数组中的一个键具有相同的值。

【问题讨论】:

标签: javascript arrays json


【解决方案1】:

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

也就是说,如果您的目标是比较两个对象,并返回对两者都相同的键集,您可以这样做

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' ]

我希望这就是你要问的......

【讨论】:

    【解决方案2】:

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

    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"}
    

    【讨论】:

      【解决方案3】:

      您似乎想要这样的事情:创建一个函数来查找第二个对象中具有给定值的所有键。然后将值从第一个对象传递给该函数。

      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']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 2012-12-06
        • 2020-12-28
        • 1970-01-01
        • 2020-08-23
        • 2017-05-22
        • 1970-01-01
        相关资源
        最近更新 更多