【问题标题】:How to find all matching keys and values of one object in array of objects?如何在对象数组中找到一个对象的所有匹配键和值?
【发布时间】:2017-07-20 02:10:11
【问题描述】:

我需要一个循环遍历对象数组并检查键和值是否与单独对象中的键和值匹配的代码,然后将包含所有键和值的对象推送到新数组中,因此对于特定情况:

var arr = [{name: 'john', lastname: 'roberts', children: 3},
           {name: 'john', lastname: 'green', children: null}, 
           {name: 'steve', lastname: 'baker', children: 3}];

var obj = {name: 'john', children: 3};

结果是:

arr2 = [{name: 'john', lastname: 'roberts', children: 3}];

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    扩展@Psidom 版本

    var arr = [{name: 'john', lastname: 'roberts', children: 3},
               {name: 'john', lastname: 'green', children: null}, 
               {name: 'steve', lastname: 'baker', children: 3}];
    
    var obj = {name: 'john', children: 3};
    
    console.log(
      arr.filter(x => Object.keys(obj).every( k => x[k] == obj[k]))
    );

    【讨论】:

      【解决方案2】:

      在数组上使用filter

      var arr = [{name: 'john', lastname: 'roberts', children: 3},
                 {name: 'john', lastname: 'green', children: null}, 
                 {name: 'steve', lastname: 'baker', children: 3}];
      
      var obj = {name: 'john', children: 3};
      
      console.log(
        arr.filter(x => x.name === obj.name && x.children === obj.children)
      );

      【讨论】:

      • 但是如果我不知道键或者有另一个具有不同键名的对象数组怎么办?
      • 你能举个例子吗? obj中的键是否总是存在于数组中对象的键中?
      • 是的,在第一个示例中,我们有 name,children 键在另一个我们有年龄,身高,体重或其他任何东西(在数组和 obj 中)。所以我不能使用键名,我宁愿需要一个通用的解决方案来解决这两种情况。
      • 我认为@JarekKulikowski 的答案是您所需要的。
      猜你喜欢
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 2021-02-20
      相关资源
      最近更新 更多