【问题标题】:How to change every 2nd and 3rd element in an array?如何更改数组中的每个第 2 和第 3 个元素?
【发布时间】:2014-11-22 14:47:31
【问题描述】:

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

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。我遇到的问题是我需要顶部的每个第二个和第三个元素都是fibs 的反符号。 IE。 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, ... ]

【问题讨论】:

  • 正如我在程序员中所说的,详细说明“不起作用”。
  • 请结合您所获得的实际输出提供所需的输出。此外,这似乎是一个奇怪的要求,因为 i%2==0 || i%3==0 将导致模式 0,2,3,4,6,8,9,10,12 14,15,16... 这是预期的吗?如果是这样并且 fibs 的元素是 [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1],top 将是 [-1 1 -1 -1 -1 1 -1 1 -1 - 1 -1 1 -1 1 -1 -1 -1 1 -1 1 -1](假设没有错别字)

标签: javascript arrays loops


【解决方案1】:

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

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 指出逻辑错误。

【讨论】:

    【解决方案2】:

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

    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]

    【讨论】:

      【解决方案3】:

      我相信你想要

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

      或者,您可以使用

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-01
        • 2021-11-09
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多