gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:16:58 24 4
gpt4 key购买 nike

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

[[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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com