gpt4 book ai didi

javascript - 从数组中删除最小值,但如果重复只删除一次

转载 作者:行者123 更新时间:2023-11-30 09:35:22 25 4
gpt4 key购买 nike

我有以下函数,它应该从数组中删除最小值,但如果这是重复的,它只会删除第一个并保留其他值。

var array1 = [1, 2, 3, 4, 5];
var array2 = [5, 3, 2, 1, 4];
var array3 = [2, 2, 1, 2, 1];

function removeSmallest(numbers) {
return numbers.filter(function(elem, pos, self) {
if(elem == Math.min.apply(null, numbers) && pos == self.indexOf(elem)) {
// Remove element from Array
console.log(elem, pos);
numbers.splice(pos, 1);
};
return numbers;
});
};

通过 console.log(elem, pos) 我知道我已经正确识别了数组中的最小元素和第一个元素,但是当我尝试通过 splice()< 删除它时,我最终得到以下数组结果:

array1 = [1, 3, 4, 5]; // But I expected [2, 3, 4, 5]
array2 = [5, 3, 2, 1]; // But I expected [5, 3, 2, 4]
array3 = [2, 2, 1, 1]; // But I expected [2, 2, 2, 1]

你知道我的代码有什么问题吗?提前感谢您的回复!

最佳答案

function removeSmallest(numbers) {
const smallest = Math.min.apply(null, numbers);
const pos = numbers.indexOf(smallest);
return numbers.slice(0, pos).concat(numbers.slice(pos + 1));
};

您不应该像现在这样使用filter()。一个函数应该返回一个新数组而不是修改现有数组也是一个很好的做法,并且您绝对不应该在迭代数组时修改它。

关于javascript - 从数组中删除最小值,但如果重复只删除一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43847029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com