javascript - BASIC Javascript array function,问题已知但我无法理解解决方案

标签 javascript arrays higher-order-functions

在下面的函数中,我试图获得类似这样的输出:

[[1,1,1,1],[2,2,2], 4,5,10,[20,20], 391, 392,591]。

我可以看到我嵌入的问题是我总是添加临时数组并推送到函数返回,因此,除了每个函数中的最后一个数字之外的所有单独数字都被也将数组对象插入目标数组。

我觉得好像我需要进一步的条件检查,但就我的生活而言,我无法提出有效的解决方案。

如有任何建议,我们将不胜感激。

const sortme = (unsortedArr)=> {

let tempArr = []; 

let outputArr = []; 

const reorderedArr = unsortedArr.sort((a,b) => a-b); 

reorderedArr.forEach((number, i) => {

    if ((i === 0) || (reorderedArr[i] === reorderedArr[i-1])) {
    tempArr.push(number);  
    }

    else {     
    outputArr.push(tempArr);
    tempArr = [];
    tempArr.push(number); 
}  
})

outputArr.push(tempArr[0]);
    return outputArr; 
}

const unsortedArr = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20]; 

sortme(unsortedArr); 

最佳答案

我会制作一个去重副本和 .map() 它将值转换为数组,其中包含您使用 .forEach 获得的原始(已排序)数组中的值> :

const unsortedArr = [1, 2, 4, 591, 392, 391, 2, 5, 10, 2, 1, 1, 1, 20, 20];

const sortMe = (arr) => {
  arr = arr.sort((a, b) => a - b);
  
  // a short way to dedupe an array
  // results in : 1, 2, 4, 5, 10, 20, 391, 392, 591
  let dedupe = [...new Set(arr)]; 
  let tmpArr;

  return dedupe.map(e => {
    tmpArr = []; // empty tmpArr on each iteration
    
    // for each element of the deduped array, look for matching elements in the original one and push them in the tmpArr
    arr.forEach(a => {
      if (a === e) 
        tmpArr.push(e);
    })
    
    if(tmpArr.length === 1)
      return tmpArr[0]; // in case you have [4] , just return the 4
    else
      return tmpArr; // in case you have [1,1,1,1]
    
    // shorthand for the if/else above
    // return tmpArr.length === 1 ? tmpArr[0] : tmpArr;
  });
}

const result = sortMe(unsortedArr);

console.log(result);

关于javascript - BASIC Javascript array function,问题已知但我无法理解解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191842/

相关文章:

ios - 一个 View Controller 中的两个 TableView ,一个 TableView 未显示

Scala:采用两个参数列表的函数对象的类型是什么?

javascript - Dojo dGrid 标题复选框选择全部不起作用

javascript - 编写一个函数,返回数组 Javascript 中所有项目的平均值

javascript - 是数组js中的元素

javascript - 如何命名由javascript动态创建的对象

Java打印一个对象数组

arrays - 通过连接两个递增子数组构成的最大长度递增 super 数组

android - Kotlin 高阶函数传递一个参数数量可变的函数作为参数

javascript - JS 中的高阶函数