Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环中的JavaScript停止运行_Javascript_Loops_Sorting_For Loop_Reduce - Fatal编程技术网

循环中的JavaScript停止运行

循环中的JavaScript停止运行,javascript,loops,sorting,for-loop,reduce,Javascript,Loops,Sorting,For Loop,Reduce,我试图按降序返回一个数字数组(最大的在前面) 我的功能似乎起作用,但在中间就放弃了。 let数组=[1,9,8,7,2,6,3,5]; 设排序=[]; 函数排序编号(数组){ 对于(var i=0;i0;i--){ 设max=array.reduce(函数(a,b){ log(`a:${a}b:${b}`); 返回Math.max(a,b); }); 设maxIdx=array.indexOf(max); 设最大=数组拼接(maxIdx,1); 排序。推送(最大); } console.log

我试图按降序返回一个数字数组(最大的在前面)

我的功能似乎起作用,但在中间就放弃了。

let数组=[1,9,8,7,2,6,3,5];
设排序=[];
函数排序编号(数组){
对于(var i=0;i排序编号(数组)您遇到的问题是由循环内部的
拼接引起的。在循环过程中更改数组。快速修复方法是向后循环数组,以便在循环开始时设置正确的长度:

for (var i = array.length; i > 0; i--) {
  // etc
}
let数组=[1,9,8,7,2,6,3,5];
设排序=[];
函数排序编号(数组){
对于(var i=array.length;i>0;i--){
设max=array.reduce(函数(a,b){
log(`a:${a}b:${b}`);
返回Math.max(a,b);
});
设maxIdx=array.indexOf(max);
设最大=数组拼接(maxIdx,1);
排序。推送(最大);
}
console.log('排序数组为:',sorted.join('');//返回9876
}

排序编号(数组)你自己这么做有什么原因吗

console.log(array.sort(function(a, b) { return a<b ? 1 : a>b ? -1 : 0; } ))



console.log(array.sort().reverse())
console.log(array.sort(函数(a,b){return ab?-1:0;}))
console.log(array.sort().reverse())

正如其他人提到的,在阵列上循环时拼接阵列通常是有风险的。向后循环有助于避免删除元素和抛出索引、跳过元素、导致逻辑错误或抛出越界异常的问题

话虽如此,您似乎正在尝试选择排序;但是,如果您只是尝试对数组进行反向排序和联接,您的方法可以简化为:

const数组=[1,9,8,7,2,6,3,5];
const sorted=array.sort((a,b)=>b-a);

console.log(sorted.join(“”)使用下划线.Js对数组和对象执行各种操作

下划线是一个JavaScript库,它提供了大量有用的函数式编程帮助程序,而不扩展任何内置对象

转到以下链接:


_.sortBy([1,2,3,4,5,6],函数(num){return Math.sin(num);})

在for循环中更改数组长度而不识别其后果是非常糟糕的。其他人已经指出,索引的更改会弄糟事情。还有什么我应该注意的吗?索引更改本身没有错…只是在一个依赖于该长度的循环中执行此操作是很棘手的…特别是当您不确定要从数组的哪一端相对于
I
在该点的位置移除时,我不会感到不安。许多开发人员都知道这一点,因为他们在学习曲线期间犯了同样的错误。我肯定是自己做的。在像这样的网站出现之前,有很多人都会头痛,甚至做起来更简单
返回b-a
。返回值不必是1或-1…任何负数或正数都有与-1或1相同的效果,只是尝试在不使用排序的情况下执行,因此我为技术面试做了更多准备。感谢您让我知道问题的根源。这绝对是我见过的最干净的版本。我试图在不使用排序方法的情况下执行此操作,但这是最好的。