问题是-
运算符不起作用(在第8行)。请参阅下面的代码:
array = [0,0,0,0,3,0,0,0,0],
n = 0;
for(var i = 0; i < array.length; i++){
if(n < 9){ //the "n" variable there's only for don't crash the browser with a infinite loop
if(array[i] == 3){
array[i] = 0;
array[i - 1] = 3; //I believe that here is the problem
}
}
n++;
}
console.log(array);
所以... 我想移动&#34; 3&#34;值到数组的开头。但它只有在我使用+
运算符(第8行)时才有效。因此,如果我使用+
,那么&#34; 3&#34;值到达数组的末尾。
有人知道为什么-
运算符在这种情况下不起作用且+
有效吗?
答案 0 :(得分:5)
如果您将第8行更改为:
array[i+1] = 3;
然后数字3将一直到数组的末尾(好吧,超出数组的末尾,我会被诅咒以找出Javascript的作用!)。这是因为循环以递增的顺序遍历数组,并且接下来将检查位置i+1
。
另一方面,使用当前第8行,数字3向后移动一个位置(已经检查过),因此它不会一直到阵列的开头,只有一个位置。如果你希望它以相同的方式一直进行,你应该反转循环(让它以位置i
的降序遍历数组。)
答案 1 :(得分:1)
当你0岁时,你认为会发生什么?1?
答案 2 :(得分:0)
在循环的第一次迭代中,当i为零时,(i - 1)为-1,所以你试图访问数组[-1],这是无效的。
答案 3 :(得分:0)
好吧,不是回答“任何人都知道为什么 - 运营商在这种情况下不工作而+工作?”,我会回答我认为真正的问题,如原帖中所述: I想要将“3”值移动到数组的开头。我认为这可以达到预期效果:
var array = [0,0,0,0,3,0,0,0,0];
var first_val = 3;
var index = array.indexOf(first_val);
if (index > 0) {
array.splice(index, 1);
array.unshift(first_val);
}
console.log(array);
受this的启发。
答案 4 :(得分:0)
我想移动&#34; 3&#34;值到数组的开头
使用here中提供的正确答案。然后使用.indexOf()
移动它。
Array.prototype.move = function (old_index, new_index) {
if (new_index >= this.length) {
var k = new_index - this.length;
while ((k--) + 1) {
this.push(undefined);
}
}
this.splice(new_index, 0, this.splice(old_index, 1)[0]);
return this; // for testing purposes
};
var array = [0,0,0,0,3,0,0,0,0];
var result = array.move(array.indexOf(3),0);
console.log(result);