循环中的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相同的效果,只是尝试在不使用排序的情况下执行,因此我为技术面试做了更多准备。感谢您让我知道问题的根源。这绝对是我见过的最干净的版本。我试图在不使用排序方法的情况下执行此操作,但这是最好的。