Javascript 我有一个数字数组。我需要返回一个新数组,其中重复的数字在它们自己的嵌套数组中
我需要取这个数组[1,2,4591392391,2,5,10,2,1,1,1,20,20],然后返回一个新数组,将所有重复的数字排序到它们自己的嵌套数组中 它应该返回[[1,1,1,1]、[2,2,2]、4,5,10、[20,20]、391392591] 我搞乱了for循环和.map()方法,似乎无法找到解决方案。在这一点上,我几乎只是在黑暗中拍摄,希望能有结果。我对javascript非常陌生Javascript 我有一个数字数组。我需要返回一个新数组,其中重复的数字在它们自己的嵌套数组中,javascript,arrays,Javascript,Arrays,我需要取这个数组[1,2,4591392391,2,5,10,2,1,1,1,20,20],然后返回一个新数组,将所有重复的数字排序到它们自己的嵌套数组中 它应该返回[[1,1,1,1]、[2,2,2]、4,5,10、[20,20]、391392591] 我搞乱了for循环和.map()方法,似乎无法找到解决方案。在这一点上,我几乎只是在黑暗中拍摄,希望能有结果。我对javascript非常陌生 const cleaner = array1.map((num, index, array) =&g
const cleaner = array1.map((num, index, array) => {
if (array1.indexOf(num) >= index) {
return num;
} else {
return array;
}
});
可以使用
reduce
执行此操作,请参见代码段中的注释:
const arr=[1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];
const result=arr.reduce((acc,curr)=>{
//检查蓄能器中是否存在该滤芯
const ndx=acc.findIndex(e=>(Array.isArray(e)?e.includes(curr):e==curr));
如果(ndx==-1){
//如果它不存在,推它
加速推力(电流);
}否则{
//如果它存在,请检查它是否是数组
if(Array.isArray(acc[ndx])acc[ndx].push(curr);//如果是,则推当前元素
else acc[ndx]=[acc[ndx],curr];//将累加器中的当前元素转换为包含上一个元素和新元素的数组
}
返回acc;
}, []);
控制台日志(结果)代码>您可以获取一个对象并使用隐式排序
var数组=[1,2,4,591,392,391,2,5,10,2,1,1,1,20,20],
结果=对象.值(数组.减少((r,v)=>{
如果(r中的v)r[v]=[]concat(r[v],v);
否则r[v]=v;
返回r;
}, {}));
控制台日志(结果)代码>您可以使用收集唯一值,然后使用和为每个值创建子数组
常量数组=[1,2,4591392391,2,5,10,2,1,1,1,20,20];
//定义一个函数,该函数。。。
常量排列=数组=>
//创建唯一值的数组
数组。从(新集合(数组))
//按升序排序唯一值
.sort((a,b)=>a-b)
//为每个唯一值创建子阵列
.map(key=>array.filter(value=>key==value))
//展开单位长度子阵列
.map(子数组=>子数组.length==1?子数组[0]:子数组);
常数清洁器=排列(数组);
log(JSON.stringify(cleaner))代码>为此,您需要执行一些操作:
计算每个数字的出现次数
对不重复的数字进行排序
将其映射为具有数字(非重复)或重复数字数组
第一步
让我们数一数物品。为此,我将创建一个对象来跟踪每个对象
const counted = array.reduce(
(acc, current) => Object.assign(acc, { [current]: acc[current] ? acc[current] += 1 : 1 }),
{}
);
使用reduce创建一个对象,如下所示:
{
'1': 5,
'2': 3,
'4': 1,
'5': 1,
// etc.
}
步骤2
让我们对元素进行排序:
const sorted = Object.keys(counted)
.map(Number) // <-- we have to remember that object keys are strings
.sort((a, b) => a - b);
如果有人要你用笔和纸做,你会怎么做?作为一个小提示,显示的结果数组不仅被排序为数组,而且还被数字排序——这是一个很好的指示器,这是您可以做的第一件事,然后从那里开始。
const sorted = Object.keys(counted)
.map(Number) // <-- we have to remember that object keys are strings
.sort((a, b) => a - b);
const final = sorted.map(
(number) => counted[number] == 1
? number
: Array.from({ length: counted[number] }, () => number)
);