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

我需要取这个数组[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) => {
    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)
    );