如何 filter/reduce 具有基于其他数组的特定动态键的对象数组

How to filter/reduce array of object with specific dynamically keys based in other array

我要解释我的问题。我没有时间考虑更多,我有一个障碍,我无法弄清楚所以任何帮助将不胜感激。例如,我有一个对象数组(它可以是包含 100 多个元素的数组):

  const arr = [
    { value: '1', id: 1, number: 1, other: 'example', data: '6' },
    { value: '2', id: 2, number: 2, other: 'example', data: '7' },
    { value: '3', id: 3, number: 3, other: 'example', data: '8' },
    { value: '4', id: 4, number: 4, other: 'example', data: '9' },
    { value: '5', id: 5, number: 4, other: 'example', data: '10' },
  ];

在另一个数组中,我有包含特定键的字符串:

  const keys = ['value', 'id', 'number'];

我的问题是我想 return 变量 arr 只包含基于 keys 变量值的对象。类似的东西:

 const arr = [
    { value: '1', id: 1, number: 1 },
    { value: '2', id: 2, number: 2 },
    { value: '3', id: 3, number: 3 },
    { value: '4', id: 4, number: 4 },
    { value: '5', id: 5, number: 4 },
  ];

我想动态地拥有它,因为 keys 变量中的值不是常量,可以是 valueotherdata 或仅是 dataidother

您可以使用 Array.prototype.map()reduce

const arr = [
    { value: '1', id: 1, number: 1, other: 'example', data: '6' },
    { value: '2', id: 2, number: 2, other: 'example', data: '7' },
    { value: '3', id: 3, number: 3, other: 'example', data: '8' },
    { value: '4', id: 4, number: 4, other: 'example', data: '9' },
    { value: '5', id: 5, number: 4, other: 'example', data: '10' },
];

const keys = ['value', 'id', 'number'];

const res = arr.map(item => keys.reduce((acc, key) => ({...acc, [key]: item[key]}), {}));

console.log(res);
.as-console-wrapper{min-height: 100% !important; top: 0;}

创建一个将 return 基于键数组的函数并使用该函数映射..

const arr = [
        { value: '1', id: 1, number: 1, other: 'example', data: '6' },
        { value: '2', id: 2, number: 2, other: 'example', data: '7' },
        { value: '3', id: 3, number: 3, other: 'example', data: '8' },
        { value: '4', id: 4, number: 4, other: 'example', data: '9' },
        { value: '5', id: 5, number: 4, other: 'example', data: '10' },
      ];

    const keys = ['value', 'id', 'number'];

    function pick(obj, keys){
        let result = {};
        for(let i=0; i<keys.length; i++){
            result[keys[i]] = obj[keys[i]];
        }
        return result;
    }

    let finalArr = arr.map( value => pick(value,keys));

    console.log(finalArr);