一个对象数组中的对象的key,如果存在在另一个数组中,则把这个key的value 存放在一个新的对象中

一个对象数组中的对象的key,如果存在在另一个数组中,则把这个key的value 存放在一个新的对象中

let keyArray = ['key1','key2','key3']

let res = [

{'otherKey':'1',

'key1':'2',

‘key2’:'3',

'key3':'4'

},

{'otherKey':'1',

'key1':'2',

‘key2’:'3',

'key3':'4'

}

...

]

let result = {

resData:{

key1:[2,2,2,...],

key2:[3,3,3,...],

...

}

}

请问怎么通过keyArray 和 res 得到result 对象


回答:

观察结果,键来自 keyArray,值来自 res,马上能想到两种方法

  • keyArray 遍历,对每个 keyres 拿数据。而 res 是每个元素对象里按 key 取值,用一个 .map() 遍历就行
  • keyArray 对每个 key 生成容器(数组),遍历 res 的每个对象,然后

    • 可以遍历每个属性,找到对应 key 的容器去插值
    • 也可以遍历每个 key 容器,去对象里拿属性

感觉第一种比较好理解,如下

const result = {

resData: Object.fromEntries(

keyArray.map(key => [key, res.map(({ [key]: value }) => value)])

)

};


回答:

const resData = {};

res.reduce((resData, item) => {

Object.entries(item).forEach(([key, value]) => keyArray.includes(key) && (resData[key] ||= []).push(value));

return resData;

}, resData);


回答:

function group(objects, keys) {

var ret = {};

for (var i = 0; i < objects.length; ++i) {

for (var key in objects[i]) {

if (keys.indexOf(key) >= 0) {

var value = objects[i][key];

if (ret.hasOwnProperty(key)) {

ret[key].push(value);

} else {

ret[key] = [value];

}

}

}

}

return ret;

}

console.dir(group(res, keyArray));

以上是 一个对象数组中的对象的key,如果存在在另一个数组中,则把这个key的value 存放在一个新的对象中 的全部内容, 来源链接: utcz.com/p/936944.html

回到顶部