Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSES6按键数组筛选对象的正确方法_Javascript - Fatal编程技术网

Javascript JSES6按键数组筛选对象的正确方法

Javascript JSES6按键数组筛选对象的正确方法,javascript,Javascript,我希望获取一个对象数组,并对每个对象进行筛选,以仅返回键与数组中某个项匹配的属性 例如: 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

我希望获取一个对象数组,并对每个对象进行筛选,以仅返回键与数组中某个项匹配的属性

例如:

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()
.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 filteredData=(数组,键)=>{
常数newArr=[];
for(设i=0;i
您可以简单地循环
并构建一个只包含这些键和相应值的新对象

const myKeys=['key_1'、'key_3'];
const myArray=[{key_1:'一些值A',key_2:'一些其他值A',key_3:'一些最终值A',},{key_1:'一些值B',key_2:'一些其他值B',key_3:'一些最终值B',},{key_1:'一些值C',key_2:'一些其他值C',key_3:'一些最终值C',},];
让final=myArray.map(v=>{
返回myKeys.reduce((op,key)=>{
op[键]=v[键]
返回操作
}, {})
})
console.log(最终版)
const myKeys=['key_1'、'key_3'];
常量myArray=[
{
键1:'某个值A',
键2:'其他值A',
键3:‘某个最终值A’,
},
{
键1:‘某些值B’,
键2:‘其他值B’,
键3:‘某些最终值B’,
},
{
键1:‘某些值C’,
键2:‘其他值C’,
键3:'某个最终值C',
},
];
const result=myArray.map(i=>Object.fromEntries(Object.entries(i).filter([k])=>myKeys.includes(k));

控制台日志(结果)
您可以
.map
每个对象到它的条目,这样您就可以
过滤出
myKeys
中没有键的条目,然后使用
.fromEntries()
构建新对象,如下所示:

const myKeys=['key_1'、'key_3'];
常量myArray=[{
键1:'某个值A',
键2:'其他值A',
键3:‘某个最终值A’,
},
{
键1:‘某些值B’,
键2:‘其他值B’,
键3:‘某些最终值B’,
},
{
键1:‘某些值C’,
键2:‘其他值C’,
键3:'某个最终值C',
},
];
const res=myArray.map(obj=>Object.fromEntries(Object.entries(obj.filter)([k,v])=>myKeys.includes(k)));

控制台日志(res)您可以映射wnated条目并使用它构建对象

const
keys=['键1','键3'],
data=[{key_1:'一些值A',key_2:'一些其他值A',key_3:'一些最终值A'},{key_1:'一些值B',key_2:'一些其他值B',key_3:'一些最终值B'},{key_1:'一些值C',key_2:'一些其他值C',key_3:'一些最终值C'}],
结果=data.map(o=>Object.fromEntries(keys.map(k=>[k,o[k]]));
控制台日志(结果)
。作为控制台包装{最大高度:100%!重要;顶部:0;}