我目前正在学习 JS 并在 Codewars 上做一些问题。我写了一个函数来解决问题,但我不明白为什么 JS 中的 for 循环会像我的解决方案中那样运行,如果有人能帮助我,我会很高兴。 问题如下:
编写一个算法,接受一个数组并将所有零移动到末尾,同时保留其他元素的顺序。
moveZeros([1, 2, 0, 1, 0, 1, 0, 3, 0, 1]) // returns[1, 2, 1, 1, 3, 1, 0, 0, 0, 0]
我的解决方案是:
var moveZeros = function(arr) {
let newarr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] === 0) {
newarr.push(arr[i])
} else {
newarr.unshift(arr[i])
};
}
return newarr;
}
我的函数返回的是:
[1, 3, 1, 1, 2, 1, 0, 0, 0, 0]
为什么 JS 把 3 放在 2 之前,虽然它在数组中的索引是 7?
提前致谢!
最佳答案
嗯unshift()
将值推到数组前面。
看看这个例子。了解 unshift()
是如何工作的。
let a = [];
a.unshift(1);
a.unshift(2);
a.unshift(3);
a.unshift(4);
console.log(a);
Push
在数组的后面添加值。
查看下面的示例以了解推送的工作原理。
let a = [];
a.push(1);
a.push(2);
a.push(3);
a.push(4);
console.log(a);
var moveZeros = function (arr) {
let newarr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] === 0) {newarr.push(arr[i])}
else {newarr.unshift(arr[i])};
} return newarr;
}
let op = moveZeros([1, 3, 1, 1, 2, 1, 0, 0, 0, 0]);
console.log(op);
关于Javascript for 数组中的循环行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53762210/