Javascript for 数组中的循环行为

标签 javascript arrays

我目前正在学习 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/

相关文章:

javascript - 计算 RGB 颜色之间的褪色值的有效方法?

javascript - JQuery 结合焦点和悬停事件

objective-c - 控制程序执行顺序的技术

c++ - 确定合并排序中边数组的大小

php - 获取二维数组中的数据

c++ - 类问题中的静态 int 数组

javascript - 使用通过链接传递的数据来个性化页面内容

javascript - 使用 WinJS.xhr 将文件放入休息服务

internet-explorer-7 - 在 IE7 中使用 appendchild 的问题

java - 在Java中如何对带有整数的字符串进行排序?