这是一个非常小的问题,对于我的生活,我无法弄清楚它是什么。我的大脑已经锁定了思维。我需要别人看看这段代码。
代码的输出应为:[1,0,0,0]
更新
该函数应该能够读取一个数字数组,如果它在数组中找到任何零,它应该将它们移动到数组的末尾。
代码的输出保持为:[0,1,0,0]
var arrNum = [0,0,0,1];
function test() {
for(var i=0; i<arrNum.length; i++){
if(arrNum[i] == 0){
arrNum.splice(i,1)
arrNum.splice(arrNum.length, 1, 0)
}
}
return alert(arrNum)
}
Here是一名工作人员。
为此道歉,我知道这个问题非常小,但我的大脑已停止工作,我需要一双新鲜的眼睛。
答案 0 :(得分:5)
按照你编写的方式,你需要以相反的顺序循环。删除索引时,最终会跳过索引。反向循环使您不会跳过它们。
for(var i=arrNum.length-1; i>=0; i--){
答案 1 :(得分:0)
您可以使用unshift()在数组的开头插入并将push()插入到结尾...
var arrNum = [0,0,0,1];
var output = [];
function test()
{
for(var i=0; i<arrNum.length; i++)
{
if(arrNum[i] == 0)
output.push(0);
else
output.unshift(arrNum[i]);
}
return alert(output)
}
答案 2 :(得分:0)
var arrNum = [0,0,0,1];
var result = [];
arrNum.forEach(function(v) {
!!v ? result.unshift(v) : result.push(v);
});
console.log(result);
答案 3 :(得分:0)
您正在使用索引i = 0,1,2,3进行迭代,同时删除数组的第一个元素。因此,您的迭代无法看到1,它会在移动到已经迭代的索引时跳过。最简单的方法是扭转循环以绕过问题。
var arrNum = [0,0,0,1];
function test() {
for(var i= arrNum.length; i >= 0; i--){
if(arrNum[i] == 0){
arrNum.splice(i,1)
arrNum.splice(arrNum.length, 1, 0)
}
}
return alert(arrNum)
}
答案 4 :(得分:0)
每次都喜欢内置功能。</ p>
var output = [];
[0,0,0,1].forEach(function(num) {
if(num == 0) output.push(0);
else output.unshift(num)
})
答案 5 :(得分:0)
为什么不使用临时数组来提供帮助?您的代码的问题是splice()函数修改了原始数组,并且您正在循环中执行它。
以下代码可以满足您的需求:
var arrNum = [0,0,0,1];
var arrResult = new Array();
function test() {
for(var i=arrNum.length-1; i>=0; i--)
{
arrResult.push(arrNum[i]);
}
arrNum = arrResult;
return alert(arrNum);
}
使用另一个数组来存储新值,您可以灵活地使用第一个数组的数据执行任何操作。
答案 6 :(得分:0)
使用对象的一个很好的方法 - 忙于学习它们,所以只需发布一个变体的结合
var methods = {
moveZero: function(arr){
//console.log(arr);
var newArr = [];
for(var i = 0; i < arr.length; i++){
if(arr[i] === 0){
newArr.push(arr[i]);
}else{
newArr.unshift(arr[i]);
}
}
console.log(newArr);
}
}
var arrNum = Object.create(methods);
arrNum.moveZero([0,0,50,56,85,0,0,43,10,0,1]);
JSFiddle - https://jsfiddle.net/ToreanJoel/qh0xztgc/1/
答案 7 :(得分:0)
问题是你正在修改一个数组,同时在if语句中循环它。
Here是你的榜样的工作人员。
var len = arrNum.length;
var index = 0;
while(len) {
if(arrNum[index] == 0) {
arrNum.splice(index,1);
arrNum.push(0);
} else {
++index;
}
--len;
}
答案 8 :(得分:0)
由于您要执行的操作实际上是排序,为了可读性和代码的紧凑性,您可能应该这样做:
meteor create --package example
它可以包含任何数字,并且将保持0以外的其他顺序