使用 .reduce() 创建一个新数组,其中包含以前数组中的所有相似键值



如何转动数组:

data = [
{key1: a, key2: 1},
{key1: b, key2: 2},
{key1: c, key2: 3}]

进入数组:

newArray = [1, 2, 3]

使用减少?

您不想减少(将数组转换为单个元素(,但尝试映射(将数组转换为另一个数组(

data = [
{key1: 'a', key2: 1},
{key1: 'b', key2: 2},
{key1: 'c', key2: 3}
]
console.log(data.map(el => el.key2))

我不知道你真正想要什么,但是看到你的示例,如果你想用reduce在对象中创建一个新数组,你可以这样做:

const data = [
{key1: "a", key2: 1},
{key1: "b", key2: 2},
{key1: "c", key2: 3}
];
const ans = data.reduce((prev, curr) => {
prev.push(curr.key2);
return prev;
}, []); // start with empty array
// ans: [ 1, 2, 3 ]

但是,如果你想在一组新的数组中分离所有键,你可以这样做:

const data = [
{key1: "a", key2: 1},
{key1: "b", key2: 2},
{key1: "c", key2: 3}
];
const ans = data.reduce((prev, curr) => {
Object.keys(curr).forEach((key) => {
if (!prev[key]) {
prev[key] = [curr[key]];
} else {
prev[key].push(curr[key]);
}
});
return prev;
}, {}); // start with empty object
// ans: { key1: [ 'a', 'b', 'c' ], key2: [ 1, 2, 3 ] }

作为我的建议,我更喜欢使用..比reduceforEachmap更清洁,更快

两者的示例:

// Example 1:
const ans = [];
for (const obj of data) {
ans.push(obj.key2);
}
// ans: [ 1, 2, 3 ]
// Example 2:
const ans = {};
for (const obj of data) {
for (const key of Object.keys(obj)) {
if (!ans[key]) {
ans[key] = [obj[key]];
} else {
ans[key].push(obj[key]);
}
}
}
// ans: { key1: [ 'a', 'b', 'c' ], key2: [ 1, 2, 3 ] }

最新更新