如何基于内部子数组的第一项合并2D数字数组?

时间:2018-12-26 19:01:25

标签: javascript arrays multidimensional-array

给出二维数组 [[2,12],[3,12],[3,15],[5,15]]

>

我想检查子数组的第一个元素是否等于邻居的第一个元素。如果它们相等,我想将它们的第二个元素相加,并用新数组替换这两个元素。

因此输出必须为: [[2,12],[3,27],[5,15]]

谢谢! 我已经尝试过常规的for循环,但是它抛出TypeError说无法访问undefined的值

nulls

2 个答案:

答案 0 :(得分:0)

您可以使用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)

上述逻辑使用三元和comma operators

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)

答案 1 :(得分:0)

您可以简化数组并为结果集中最后推送的元素获取一个辅助变量;

describe('Test Component using hooks', () => {
  test('MyDiv', () => {
    expect(<MyDiv/>).toMatchSnapshot();
  })
});