javascript - 排序函数在放入 for 循环时表现不同

标签 javascript arrays sorting

我有两种排序函数,它们用于对数字数组进行排序并返回前两个索引的总和,但是当这些函数在 for 循环中运行时,第二个函数不起作用应该。

这是第一个:

function solution(numbers) {
    numbers.sort(function (a, b) { 
        return a - b;
    }); 
    return numbers[0] + numbers[1];
}

这是第二个:

function sumTwoSmallestNumbers(numbers) {
    var findSmallest = function(startsAt){
        var first = startsAt;
        for (var i =0; i<=numbers.length-1; i++){
            if(first >= numbers[i]){
                first = numbers[i];
            }
        }
        return first;
    }
    var smallest = findSmallest(numbers[0]);
    var index = numbers.indexOf(smallest);
    numbers.splice(index,1);
    var secondSmallest = findSmallest(numbers[0]);
    return smallest+secondSmallest
};

这是 for 循环:

for (let i = 0; i < 100; i++) {
    var randArr = [Test.randomNumber()+1000,Test.randomNumber(),Test.randomNumber(),Test.randomNumber(),Test.randomNumber()];
    var staticArr = [1000, 50,12000, 275, 21000, 1];
    console.log("Result of user function is: " + sumTwoSmallestNumbers(staticArr) + ". Result of own function is: " + solution(staticArr));
    Test.assertEquals(sumTwoSmallestNumbers(randArr), solution(randArr));
}

查看 fiddle 中的控制台:https://jsfiddle.net/emporio/p4r7go57/1/

最佳答案

numbers.splice(index,1);

这会修改输入数组,移除最小的数字。每次调用 sumTwoSmallestNumbers 时都会删除一个项目,这会在下次调用时更改结果。

关于javascript - 排序函数在放入 for 循环时表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39772555/

相关文章:

javascript - ajax下载文件出错

javascript - 使用 javascript 从 txt 文件中读取数据,每 5 分钟一次

javascript - 如何使用JAVA在MONGODB中存储值?

C - 指向字符串数组的指针不起作用

c - 删除 char 数组中的第一个标记并将其余部分保留在 C 中

arrays - 打印 C 中存储指向数组的指针的地址

php - 将一个对象数组与另一个数组进行比较和排序

javascript - 如何在 index.html 中传递变量以响应组件

python - 如何快速匹配两个已排序文件的字段,但一个是另一个文件的子集

javascript - 如果显式定义排序顺序,排序会非常慢