JS ES6 通过键数组过滤对象的正确方法

2023-11-29

我想获取一个对象数组并过滤每个对象以仅返回键与数组中的项目匹配的属性。

例如:

const myKeys    = ['key_1', 'key_3'];
const myArray   = [
    { 
        key_1: 'Some Value A',
        key_2: 'Some Other Value A', 
        key_3: 'Some Final Value A',
    },
    { 
        key_1: 'Some Value B',
        key_2: 'Some Other Value B', 
        key_3: 'Some Final Value B',
    },
    { 
        key_1: 'Some Value C',
        key_2: 'Some Other Value C', 
        key_3: 'Some Final Value C',
    },
];

应该产生以下结果:

const result   = [
    { 
        key_1: 'Some Value A',
        key_3: 'Some Final Value A',
    },
    { 
        key_1: 'Some Value B',
        key_3: 'Some Final Value B',
    },
    { 
        key_1: 'Some Value C',
        key_3: 'Some Final Value C',
    },
];

我相信这应该可以通过结合.map() and .filter()但我不确定如何最好地使用 ES6 实现以下效果:

const filteredData = (array, keys) => {
    const newArr = [];

    for (let i = 0; i < myArray.length; i++) {
        const item      = myArray[i];
        let newObj      = {};

        for (let j = 0; j < myKeys.length; j++) {
            const filter = myKeys[j];
            newObj[filter] = item[filter];
        }

        newArr.push(newObj);
    }

    return newArr;
}

console.log(filteredData(myArray, myKeys));

您可以映射所需的条目并用它构建对象。

const 
    keys = ['key_1', 'key_3'],
    data = [{ key_1: 'Some Value A', key_2: 'Some Other Value A', key_3: 'Some Final Value A' }, { key_1: 'Some Value B', key_2: 'Some Other Value B', key_3: 'Some Final Value B' }, { key_1: 'Some Value C', key_2: 'Some Other Value C', key_3: 'Some Final Value C' }],
    result = data.map(o => Object.fromEntries(keys.map(k => [k, o[k]])));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS ES6 通过键数组过滤对象的正确方法 的相关文章

随机推荐