我试图按降序返回数字数组(前面最大)。
我的功能似乎可以正常工作,但只是在中间退出。
let array = [1, 9, 8, 7, 2, 6, 3, 5];
let sorted = [];
function sortNumbers(array) {
for (var i = 0; i < array.length; i++) {
let max = array.reduce(function(a, b) {
console.log(`a: ${a} b: ${b}`);
return Math.max(a, b);
});
let maxIdx = array.indexOf(max);
let biggest = array.splice(maxIdx, 1);
sorted.push(biggest);
}
console.log('sorted array is: ', sorted.join(''));
//returns 9876
}
sortNumbers(array);
答案 0 :(得分:1)
您遇到的问题是由循环内的splicing
引起的。在遍历数组时可以更改它。快速解决方法是向后遍历数组,因此您可以在循环开始时设置正确的长度:
for (var i = array.length; i > 0; i--) {
// etc
}
let array = [1, 9, 8, 7, 2, 6, 3, 5];
let sorted = [];
function sortNumbers(array) {
for (var i = array.length; i > 0; i--) {
let max = array.reduce(function(a, b) {
console.log(`a: ${a} b: ${b}`);
return Math.max(a, b);
});
let maxIdx = array.indexOf(max);
let biggest = array.splice(maxIdx, 1);
sorted.push(biggest);
}
console.log('sorted array is: ', sorted.join('')); //returns 9876
}
sortNumbers(array);
答案 1 :(得分:1)
正如其他人提到的那样,在循环遍历数组时通常会有风险。向后循环可以帮助避免出现以下问题:删除元素并抛出索引,跳过元素,导致逻辑错误或抛出异常。
话虽如此,看来您正在尝试选择排序;但是,如果您只是想对数组进行反向排序和合并,则方法可以简化为:
const array = [1, 9, 8, 7, 2, 6, 3, 5];
const sorted = array.sort((a, b) => b - a);
console.log(sorted.join(""));
答案 2 :(得分:0)
您有理由自己这样做吗?
local: {
email: String,
password: String,
admin: Boolean,
snoozeAmount: Number,
snoozeInterval: String,
emailIntervalWeeks: Number,
emailIntervalDay: Number,
isVerified: { type: Boolean, default: false },
verifyToken: String,
passwordResetToken: String,
lastConnectionEdit: Date
}
答案 3 :(得分:0)
使用Underscore.Js对数组和对象进行各种操作。
Undercore是一个JavaScript库,它提供了很多有用的功能编程助手,而无需扩展任何内置对象
转到以下链接:https://underscorejs.org/#
_。sortBy([1,2,3,4,5,6],function(num){return Math.sin(num);});