我如何匹配数字并创建二维数组?

问题描述 投票:3回答:4

我有一个像[1.2, 1.3, 1.4, 2.2, 2.3, 3.0, 4.3, 4.4, 4.5, 4.6, 4.7]这样的数组

如何将其转换为基于十进制前的匹配数字的二维数组?

例如[[1.2, 1.3, 1.4], [2.2, 2.3], [3.0], [4.3, 4.4, 4.5, 4.6, 4.7]]

javascript arrays multidimensional-array
4个回答
5
投票

您可以使用Array.reduce进行此操作,使用基于每个值的整数部分的索引来构建数组:

Array.reduce

如果可以有从0开始的值或值之间有间隔,则可以使用类似的代码,然后使用arr = [1.2, 1.3, 1.4, 2.2, 2.3, 3.0, 4.3, 4.4, 4.5, 4.6, 4.7]; let res = arr.reduce((c, v) => { i = Math.trunc(v) - 1; c[i] = c[i] || []; c[i].push(v); return c; }, []); console.log(res);来提取填充的数组:


1
投票

因为它总是被排序的,所以您可以使用这种命令方法:

Object.values()

它只跟踪最新的数字及其当前子数组。如果下一个整数大于当前数字,则它将创建一个新数组,否则将压入当前子数组。

有些人可能不喜欢将赋值的结果用作值。如果没有,则可以使用几行额外的代码轻松地对其进行重做。


1
投票

假设您要在它们之间使用空数组,可以像这样使用arr = [0.2, 1.3, 1.4, 2.2, 2.3, 3.0, 4.3, 4.4, 4.5, 6.6, 8.7]; res = arr.reduce((c, v) => { i = Math.trunc(v); c[i] = c[i] || []; c[i].push(v); return c; }, []); res = Object.values(res) console.log(res);

const arr = [1.2, 1.3, 1.4, 2.2, 2.3, 3.0, 4.3, 4.4, 4.5, 4.6, 4.7];

let curr = -Infinity;
let currArr = null;
const res = [];

for (let n of arr) {
  if (Math.trunc(n) > curr) {
    res.push(currArr = [curr = n]);
  } else {
    currArr.push(n);
  }
}

console.log(res);

结果:

reduce()

0
投票

使用const numbers = [1.2, 1.3, 1.4, 2.2, 2.3, 3.0, 4.3, 4.4, 4.5, 4.6, 4.7]; const grouped = numbers.reduce( (result, number) => { result[Math.trunc(number)].push(number); return result; }, Array(Math.trunc(Math.max(...numbers)) + 1).fill().map(() => []) ); ,然后使用[ [], [1.2,1.3,1.4], [2.2,2.3], [3], [4.3,4.4,4.5,4.6,4.7] ] 遍历并根据sort值进行分组。

forEach
© www.soinside.com 2019 - 2024. All rights reserved.