首页 > 解决方案 > 如何告诉 Javascript 过滤对象数组

问题描述

我试图弄清楚如何告诉 javascript 过滤对象数组,这是代码

我希望我在代码中解释了所有内容 //* 是问题所在。

function whatIsInAName(collection, source) { // first arg is the array of objects, second arg is the object i want to get matched
  let arr = [];
  let newArr = Object.getOwnPropertyNames(source); // this converts the object into an array

  for (let i = 0; i < collection.length; i++) { // loop through objects
    for (let s = 0; s < newArr.length; s++) { // loop through array
      if (collection[i].hasOwnProperty(newArr[s]) === true) { //* it returns an object if it matches 1 element of array
        console.log(collection[i]) // i want it to return only if all elements on the array matches
        arr.push(collection[i]);
      }
    }
  }
  return arr;
}

whatIsInAName([{
  "apple": 1,
  "cookie": 6
}, {
  "apple": 1,
  "bat": 2
}, {
  "cookie": 2
}, {
  "apple": 1,
  "cookie": 4
}, {
  "apple": 1,
  "bat": 2,
  "cookie": 2
}], {
  'apple': 1,
  "cookie": 2
})

标签: javascript

解决方案


尝试这样的事情:

let collection = [{ "apple": 1, "cookie": 6}, {"apple": 1, "bat": 2 }, { "cookie": 2 }, { "apple": 1, "cookie": 4 }, { "apple": 1, "bat": 2, "cookie": 2 }];
let source = { 'apple': 1, "cookie": 2 };

let filtered = collection.filter(e=>(
    Object.getOwnPropertyNames(e).every(ee=>source.hasOwnProperty(ee))&&
    Object.getOwnPropertyNames(source).every(ee=>e.hasOwnProperty(ee))));
console.log(filtered);


推荐阅读