gpt4 book ai didi

javascript - 通过使用在每个子数组的第一个元素中找到的子字符串作为键来组合子数组

转载 作者:数据小太阳 更新时间:2023-10-29 06:04:33 24 4
gpt4 key购买 nike

具有这种形式的二维数组:

arr = [
["12325-a", 1, 1, 1],
["43858-b", 3, 4, 1],
["84329-a", 6, 5, 2],
["18767-b", 0, 9, 0],
["65888-b", 5, 4, 4],
];

在每个子数组中,第一个元素是一个字符串。

我想将具有相同末端的子数组组合在一起。在这种情况下,它将是两个组:-a-b

数值应根据索引计算为总和。

所以结果看起来像:

arr = [
["-a", 7, 6, 3],
["-b", 8, 17, 5],
];

我的解决方案(不起作用):

let arr = [
["12325-a", 1, 1, 1],
["43858-b", 3, 4, 1],
["84329-a", 6, 5, 2],
["18767-b", 0, 9, 0],
["65888-b", 5, 4, 4],
];

result = arr.reduce(function(acc, curr) {
if (acc[curr[0].substr(curr[0].length - 2)]) {
acc[curr[0]] = acc[curr[0]].map(function(val, index) {

if (index) {
return val + curr[index];
}
return val;
});
} else {
acc[curr[0]] = curr;
}
return acc;
}, {});

console.log(result)

最佳答案

您可以先使用 reduce 方法创建对象,然后使用 Object.values 获取值数组。

const arr = [
["12325-a", 1, 1, 1],
["43858-b", 3, 4, 1],
["84329-a", 6, 5, 2],
["18767-b", 0, 9, 0],
["65888-b", 5, 4, 4],
];

const result = arr.reduce((r, [str, ...rest]) => {
let key = str.split(/(\d+)/).pop();
if(!r[key]) r[key] = [key, ...rest];
else rest.forEach((e, i) => r[key][i + 1] += e)
return r;
}, {})

console.log(Object.values(result))

关于javascript - 通过使用在每个子数组的第一个元素中找到的子字符串作为键来组合子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com