如何更改数组中的每个第2和第3个元素?

时间:2014-11-22 14:47:32

标签: javascript arrays loops

这是我的困境,我有这个代码:

var fibs = [1, 2];
for (i = 0; i < (window.innerWidth / 50); i++) {
    if (fibs.length < 15) {
        var n = fibs[i] + fibs[i + 1];
        fibs.push(n);
    }
}

创建斐波纳契数列的数组。然后我将fibs的内容复制到一个新数组top。我遇到的问题是,我需要顶部的每个第2和第3个元素成为fibs的反转符号。即。 top[0] = fibs[0]; top[1] = -fibs[1]; top[2] = -fibs[2]; top[3] = fibs[3]我希望能够以编程方式执行此操作,因为数组的长度将根据屏幕的宽度而变化。

以下是我尝试使用的内容。

var top = [];
for (i = 0; i < fibs.length; i++) {
    if (i % 2 == 0 || i % 3 == 0) {
        top[i] = -(fibs[i]);
    } else {
        top[i] = fibs[i];
    }
}

我得到的是[-1, 2,-3, -5, -8, 13, -21, 34, -55, -89, -144, 233, -377, 610, -987],我正在寻找的是[-1, 2, 3, -5, -8, 13, 21, -34, -55, 89, 144, ... ]

3 个答案:

答案 0 :(得分:0)

虽然这可能不是最好的方法,但这应该有效:

var topp = [];
for (i = 0; i < fibs.length; i++) {
    if (i % 3 == 1 || i % 3 == 2) {
        topp[i] = fibs[i] - (2 * fibs[i]);
    } else {
        topp[i] = fibs[i];
    }
}

代码非常自我解释。

编辑:

感谢@alexpods提供关于top关键字的提示。

感谢@Scott Hunter指出逻辑错误。

答案 1 :(得分:0)

请允许我为您的问题提供更灵活(可读)的解决方案:

function fibonacci(length) {
    var out = [0, 1];
    for (i = 2; i < length; i++) {
        out[i] = out[i-1] + out[i-2];
    }
    return out;
}

function modifyValues(source, factors) {
    var out = [];
    for (i = 0; i < source.length; i++) {
        out[i] = source[i] * factors[i % factors.length];
    }
    return out;
}

fibs = fibonacci(15);
mod1 = modifyValues(fibs, [1,-1,-1]);
console.log(fibs, mod1);
  

[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377]
  [0,-1,-1,2,-3,-5,8,-13,-21,34,-55,-89,144,-233,-377]

答案 2 :(得分:-1)

我相信你想要

if ( i%3==1 || i%3==2 ) {

或者,您可以使用

if ( i%3 ) { // will be treated as true as long as i%3 != 0