一个对象数组中的对象的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
遍历,对每个key
去res
拿数据。而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