首页 > 解决方案 > 如何通过Javascript中的数组从对象过滤中获取属性

问题描述

我有一个这样的 JS 对象:

const myObj = {
  '$prop1': 1,
  '$prop2': 2,
  '$prop3': 3
};

和这样的对象数组:

const myArray = [
  {
    prop1: 'some stuff',
    prop2: 'some other stuff',
    propKey: '$prop1'
  },
        {
    prop1: 'some stuff',
    prop2: 'some other stuff',
    propKey: '$prop2'
  },
        {
    prop1: 'some stuff',
    prop2: 'some other stuff',
    propKey: '$prop5'
  },
];

我正在尝试编写一个过滤 myObj 的函数,并且只获取我可以在 myArray.propKey 中找到的字段。

这是我到目前为止没有运气的尝试:

export const filterVariantContentByColumns = (myObj, myArray) => {
  const objArray = Object.keys(myObj).map(i => myObj[i]);
  return objArray.filter(value => myArray.includes(value.key_name));

  console.log(res);
};

知道该怎么做吗?

标签: javascript

解决方案


您可以迭代数组并映射找到的属性。

const
    myObj = { $prop1: 1, $prop2: 2, $prop3: 3 },
    myArray = [{ prop1: 'some stuff', prop2: 'some other stuff', propKey: '$prop1' }, { prop1: 'some stuff', prop2: 'some other stuff', propKey: '$prop2' }, { prop1: 'some stuff', prop2: 'some other stuff', propKey: '$prop5' }],
    result = myArray.flatMap(({ propKey }) => propKey in myObj ? myObj[propKey] : []);

console.log(result);

带钥匙

const
    myObj = { $prop1: 1, $prop2: 2, $prop3: 3 },
    myArray = [{ prop1: 'some stuff', prop2: 'some other stuff', propKey: '$prop1' }, { prop1: 'some stuff', prop2: 'some other stuff', propKey: '$prop2' }, { prop1: 'some stuff', prop2: 'some other stuff', propKey: '$prop5' }],
    result = Object.fromEntries(myArray.flatMap(({ propKey }) => propKey in myObj ? [[propKey, myObj[propKey]]] : []));

console.log(result);


推荐阅读