Javascript 如何匹配数字并创建二维数组?
我有一个这样的数组Javascript 如何匹配数字并创建二维数组?,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个这样的数组[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]您可以使用基于每个值的整数部分的索引来构建数组: arr=[1.2,1.3,1.4,2.2,2.3,3.0,4.3,4.4,4.5,4.6,4.7]; 让res=arr.reduce((c,v)=>{ i=数学trunc(v)-1;
[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]
您可以使用基于每个值的整数部分的索引来构建数组:
arr=[1.2,1.3,1.4,2.2,2.3,3.0,4.3,4.4,4.5,4.6,4.7];
让res=arr.reduce((c,v)=>{
i=数学trunc(v)-1;
c[i]=c[i]| |[];
c[i].推(v);
返回c;
}, []);
控制台日志(res)代码>假设您希望在这两者之间使用空数组,可以像这样使用reduce()
:
const number=[1.2,1.3,1.4,2.2,2.3,3.0,4.3,4.4,4.5,4.6,4.7];
const group=numbers.reduce(
(结果,数字)=>{
结果[数学特鲁克(数字)]。推送(数字);
返回结果;
},
数组(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]
]
因为它总是被排序的,所以您可以使用这种命令式方法:
const arr=[1.2,1.3,1.4,2.2,2.3,3.0,4.3,4.4,4.5,4.6,4.7];
设curr=-无穷大;
设currArr=null;
常数res=[];
对于(让n个arr){
如果(数学特例(n)>当前){
res.push(currArr=[curr=n]);
}否则{
电流推力(n);
}
}
控制台日志(res)代码>使用排序
,然后使用forEach
遍历,并根据数学楼层
值分组
const split=(数据)=>{
常量输出=[];
设temp=[];
数据
.sort((a,b)=>a-b)
.forEach((num)=>{
常数[第一]=温度;
如果(第一层&数学层(num)>数学层(第一层)){
输出推送([…温度]);
温度=[];
}
温度推送(num);
});
如果(温度长度>0){
输出推送([…温度]);
}
返回输出;
};
常数数据=[1.2,1.3,1.4,2.2,2.3,3.0,4.3,4.4,4.5,4.6,4.7];
控制台日志(拆分(数据))代码>您不会说原始数组是否有序。您的数组是按数字排序的。这种情况一定会发生吗?你的数组总是正值>=1吗?是的,它总是从低到高排序。数据中是否会有间隙,例如[1.2,4.1,6.7]
?这似乎假设了很多,比如没有负数,从来没有0.x,也没有孔。如果需要,你也可以先对数组排序:)@slapy同意;它是根据提供的数据回答问题的。如果这被证明是错误的,我会编辑/delete@KenYo此代码不依赖于正在排序的数组。请记住,此代码将在数组中生成空条目,这不同于未定义的或null
。如果数据已排序,这可能是最简单的解决方案。值得注意的是,通过执行.fill([])
,您在每个索引之间共享相同的对象(数组)引用。这并不重要,因为您的.cocnat()
会创建新数组,但只是为了防止有人试图在不使用新数组覆盖的情况下对空数组进行变异。我将其编辑为使用map()
(前面加上fill()
,因为您无法映射空值)。通过这种方式,我可以将它简化为使用push()
而不是concat()
。