javascript - 如何根据内部子数组的第一项合并二维数字数组?
问题描述
给定二维数组[ [ 2, 12 ], [ 3, 12 ], [ 3, 15 ], [ 5, 15 ] ]。
我想检查子数组的第一个元素是否等于邻居的第一个元素。如果它们相等,我想将它们的第二个元素相加并用新数组替换这两个元素。
所以输出必须是:[ [ 2, 12 ], [ 3, 27 ], [ 5, 15 ] ]。
谢谢!我尝试了常规的 for 循环,但它抛出 TypeError 说它无法访问 undefined 的值
for (let i = 0; i < arr.length; i++) {
if (arr[i][0] === arr[i+1][0]) console.log( arr[i] );
}
TypeError: Cannot read property '0' of undefined
at evalmachine.<anonymous>:5:29
at Script.runInContext (vm.js:74:29)
at Object.runInContext (vm.js:182:6)
at evaluate (/run_dir/repl.js:133:14)
at ReadStream.<anonymous> (/run_dir/repl.js:116:5)
at ReadStream.emit (events.js:180:13)
at addChunk (_stream_readable.js:274:12)
at readableAddChunk (_stream_readable.js:261:11)
at ReadStream.Readable.push (_stream_readable.js:218:10)
at fs.read (fs.js:2124:12)
解决方案
你可以做这样的事情使用reduce
检查accumulator
的最后一项是否与key
上下文中的当前项相同。如果是,请对各value
部分求和。否则,将项目推送到accumulator
const data = [[2, 12], [3, 12], [3, 15], [5, 15]];
const newArray = data.reduce((acc, a, i) => {
if (i > 0 && a[0] === data[i-1][0])
acc[acc.length-1][1] += a[1]
else
acc.push(a);
return acc
}, [])
console.log(newArray)
上述逻辑使用三元和逗号运算符
const data = [[2, 12], [3, 12], [3, 15], [5, 15]];
const newArray = data.reduce((acc, a, i) => (
i > 0 && a[0] === data[i-1][0]
? acc[acc.length-1][1] += a[1]
: acc.push(a), acc), [])
console.log(newArray)
推荐阅读
- php - 无法加载资产文件codeigniter
- python - 即使代码适用于其他人,sqlite 操作错误
- python - 为什么第一个矩阵的元素是列表,而第二个矩阵的元素是 ndarrays
- r - which.min() 返回两个数字
- javascript - javascript,如何验证文本框格式的日期范围?
- python-3.x - 带有 tf.GradientTape 的 TensorFlow 2.0 学习率调度器
- c++ - 介绍性 C++ 示例程序中的编译器错误
- r - R/Rstudio 挫折 - 无法停止代码执行
- python - 如何将高斯法线与直方图匹配?
- node.js - 将后端部署到 Azure 时遇到问题