处理一个包含对象的数组,并将这些对象中相同的 key 的值收集到一个新的对象中,每个 key 对应一个数组。以下是实现这一目标的 JavaScript 代码示例:
假设 res.data 的结构如下:
[
{ "name": "Alice", "age": 30, "city": "Wonderland" },
{ "name": "Bob", "age": 25, "city": "Gotham" },
{ "name": "Charlie", "age": 35, "city": "Metropolis" }
]
我们希望创建如下的结构:
{
"name": ["Alice", "Bob", "Charlie"],
"age": [30, 25, 35],
"city": ["Wonderland", "Gotham", "Metropolis"]
}
以下是实现这个任务的 JavaScript 代码:
// 假设 res 是我们收到的响应对象
const res = {
data: [
{ "name": "Alice", "age": 30, "city": "Wonderland" },
{ "name": "Bob", "age": 25, "city": "Gotham" },
{ "name": "Charlie", "age": 35, "city": "Metropolis" }
]
};
// 创建一个新对象,使用 res.data 数组里面所有对象中相同的 key 作为 key 数组
const createKeyArrayObject = (dataArray) => {
const result = {};
// 遍历 dataArray 中的每一个对象
dataArray.forEach(item => {
// 遍历每个对象中的每一个键
for (const key in item) {
if (item.hasOwnProperty(key)) {
// 如果 result 中没有该键,则初始化为一个空数组
if (!result[key]) {
result[key] = [];
}
// 将对应的值 push 到数组中
result[key].push(item[key]);
}
}
});
return result;
};
// 调用函数并传入 res.data
const processedData = createKeyArrayObject(res.data);
console.log(processedData);
这个代码的工作流程如下:
- 定义一个函数
createKeyArrayObject
,它接受一个对象数组dataArray
作为参数。 - 初始化一个空对象
result
。 - 使用 forEach 循环遍历
dataArray
数组中的每一个对象item
。 - 对于每个对象,使用
for...in
循环遍历其键。 - 检查 item 是否拥有该键(使用
hasOwnProperty
以确保不会遍历到原型链上的属性)。 - 如果
result
中没有该键,则初始化为一个空数组。 - 将每个键对应的值
push
到result
中相应的键数组。 - 返回处理后的结果对象
result
。
这样,processedData
就是包含所有键数组并将对应值 push
进去的新对象。这个方法适用于处理对象数组并将相同键的值收集到数组中。