对象数组与javascript中对象数组比较

798qvoo8  于 2022-12-02  发布在  Java
关注(0)|答案(5)|浏览(227)

比较对象数组与键数组,过滤对象数组与数组键。
输入:

let a = ['aa'];
let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}];

输出:

b = [{bb: 2, c: 30 },{bb: 3, c: 40}];

original array should be mutate.
clj7thdc

clj7thdc1#

与@SachilaRanawaka的答案非常相似,但无需修改原始b数组即可工作:

let a = ['aa'];
let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}];

function removeKey(obj, key) {
  let clone = Object.assign({}, obj); // <-- shallow clone
  if (key in clone) {
    delete clone[key];
  }
  return clone;
}

function removeKeys(keys, objs) {
  return objs.map(o => keys.reduce(removeKey, o));
}

console.log(removeKeys(a, b));
46scxncf

46scxncf2#

你可以采取一个解构与获得其余的方法。
这种方法不会改变原始数据。
第一个

vsikbqxv

vsikbqxv3#

它可能可以用更少的代码行来解决,但这是我能想到的第一个。

let keysToRemove = ['aa'];
let array = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}];
let result = array.map((item) => {
  let filtered = Object.keys(item)
    .filter((key) => !keysToRemove.includes(key))
    .reduce((obj, key) => {
      obj[key] = item[key];
      return obj;
    }, {});
  return filtered;
});
console.log(result);
jm2pwxwz

jm2pwxwz4#

使用map运算符并使用delete从对象中删除属性

let a = ['aa'];
let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}];

const result = b.map(item => {

    Object.keys(item).forEach(key => {
       if(a.includes(key)){
          delete item[key]
       }
    })
    
    return item
  
})

console.log(result)
egmofgnx

egmofgnx5#

您可以借助Array.forEach()方法简单地实现此要求。
现场演示**:**

let a = ['aa'];
let b = [{ aa: 1, bb: 2, c: 30 },{ aa: 2, bb: 3, c: 40}];

b.forEach(obj => {
  Object.keys(obj).forEach(key => {
    a.forEach(item => delete obj[item])
  });
});

console.log(b);

相关问题