“+”和“ - ”运算符的问题

时间:2014-05-29 00:00:02

标签: javascript algorithm

问题是-运算符不起作用(在第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;值到达数组的末尾。

有人知道为什么-运算符在这种情况下不起作用且+有效吗?

5 个答案:

答案 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);

JSFiddle Demo