我相信这很简单,我不需要完整的解决方案,只需要指出正确的方向,因为我正在学习。
我有:
let randomArray = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];
目标是将它分组成相似的项目,使其看起来像这样:
[[1,1,1,1],[2,2,2],[10],[20,20],[391],[392],[591]]
我的以下代码很好地进行了排序和分组。我将temp推入我的Group数组。但当我重置我的“tempArray”以使其为空准备下一个“group”时,它也会从我的group中删除数据。因为它是链接的?我猜测?或许?
最后只剩下最后一项。
我该怎么阻止它这样做?
// My SOlution
let randomArray = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20];
let tempArray = [];
let groupArray = [];
function cleanTheRoom (arr) {
let ascendingArray = arr.sort(function(a,b) {
return a - b;
});
tempArray.push(randomArray[0])
for (let i = 1; i <= randomArray.length; i++) {
if (randomArray[i] === tempArray[0]) {
tempArray.push(randomArray[i])
} else {
groupArray.push(tempArray);
tempArray = []
tempArray.push(randomArray[i])
}
} console.log(groupArray)
}
cleanTheRoom(randomArray);
tempArray.length = 0
应该改为tempArray = []
。 就是这么简单。 你应该将一个新数组赋值给tempArray
,否则所有的tempArray
引用都需要保留对原始值的引用,这就是为什么会出现奇怪的日志。 当然也有更快(更简单)的方法来做到这一点。 - brioshejegroupArray.push([...tempArray])
。只要你的数组只包含基元,那么这也能完成任务。这是因为它将数组基元值推送到groupArray中,这些值不再与tempArray
链接。无论哪种方式,都应该按预期工作。 - brioshejetemp
数组推入groupArray
数组中,否则groupArray
将不包含最后一个数字,即591
。 - YousafgroupArray.push([...tempArray])
看起来并没有按照预期工作,它只是将它们列出来。不过我可能做错了什么。 我注意到最后一个项目没有被推入,我会立即处理,谢谢。 - Voodoo Science