【问题标题】:How to operate the elements of an array如何操作数组的元素
【发布时间】:2010-02-01 16:16:09
【问题描述】:

我必须操作一个 4 元素数组,计算相邻元素之间的差异并使用结果差异创建一个新数组。最后一个元素应该与第一个元素并列。

示例:

firstArray=[0,1,2,3];
secondArray = newArray();

第二个数组将是:

secondArray[0]: 1-0 = 1
secondArray[1]: 2-1 = 1
secondArray[2]: 3-2 = 1
secondArray[3]: 3-0 = 3

所以新的数组应该是secondArray=[1,1,1,3]

我尝试使用 for 循环来执行此操作,但是当要操作第三个数组时,它总是操作 firstArray[3] - secondArray[0]... 当它应该是 firstArray[3] - firstArray[0 ]

如何操作 firstArray 与新创建的 secondArray 区分开来?

谢谢!

【问题讨论】:

  • 最后一个不应该是0-3 = -3吗?
  • [1, 4, 19, -55, 20] 提供了什么?
  • @red:您能否使用我在回答中使用的符号对每个结果进行描述?我对你写它的方式有点困惑。在我看来,您希望第 n-1 个元素减去第 0 个元素,这似乎打破了您的模式。
  • @KennyTM 使用您的数组,结果数组应该是: [3, 15, 74, 75, 19] 两个相邻数字之间的差异应该始终是减去较大数字减去较小数字的结果.
  • @FrustratedWithFormsDesigner:使用 KennyTM 给出的示例,使用该数组,我应该生成一个像这样的系列:[1,4,19,-55,20] [3,15,74,75 ,19] [12,59,1,56,16] [47,58,55,40,4] [11,3,15,36,43] 抱歉,如果我的问题不清楚,谢谢

标签: javascript arrays


【解决方案1】:

在您的示例中,您从未对第三个数组说过任何话。

这是你想要做的吗?

secondArray[0] = firstArray[1]-firstArray[0];
secondArray[1] = firstArray[2]-firstArray[1];
secondArray[2] = firstArray[3]-firstArray[2];
secondArray[3] = firstArray[0]-firstArray[3];

如果你在一个循环中,表达式可能是

secondArray[i] = firstArray[(i+1)%arrayLength]-firstArray[i];

更新:

secondArray[i] = Max(firstArray[(i+1)%arrayLength],firstArray[i]) - Min(firstArray[(i+1)%arrayLength],firstArray[i]);

使用 Max 和 Min 将得到两个元素中较大和较小的值。这有帮助吗?

【讨论】:

  • 问题状态fistArray[3] - firstArray[0],反之亦然...
【解决方案2】:

在你的循环中:

if (i == 3)
firstArray[i] - firstArray[0];

【讨论】:

    【解决方案3】:

    试试这个:

    var firstArray = [0,1,2,3],
        secondArray = [];
    firstArray.forEach(function(val, i, arr) {
        secondArray[i] = arr[(i+1)%arr.length] - val;
    });
    

    编辑    没有forEach的解决方案:

    for (var i=0; i<firstArray.length; ++i) {
        secondArray[i] = firstArray[(i+1)%firstArray.length] - firstArray[i];
    }
    

    【讨论】:

    • forEach 仅适用于某些浏览器,您的解决方案应该也支持 IE。
    • +1 因为这个原因。最低公分母思维会让你只看太阳和吃麦当劳。走出阴沟。
    【解决方案4】:
    input = [1, 4, 19, -55, 20];
    
    function f(a) {
       function next(a) {
         var t = [], l = a.length;
         for (var i = 1; i < l; ++ i)
           t.push(Math.abs(a[i] - a[i-1]));
         t.push(Math.abs(a[l-1] - a[0]));
         return t;
       }
    
       var l = a.length;
       var result = [a];
       for (var i = 0; i < l-1; ++ i)
         result.push(next(result[i]));
       return result;
    }
    
    f(input);
    // [[1, 4, 19, -55, 20], [3, 15, 74, 75, 19], [12, 59, 1, 56, 16], [47, 58, 55, 40, 4], [11, 3, 15, 36, 43]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 2020-02-03
      • 2010-10-04
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多