如何操作数组的元素

时间:2010-02-01 16:16:10

标签: javascript arrays

我必须操作一个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] ......当它应该是fistArray [3] - firstArray [0 ]

如何操作firstArray以区别于新创建的secondArray?

谢谢!

4 个答案:

答案 0 :(得分: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将获得所讨论的两个元素中越来越大的元素。这有帮助吗?

答案 1 :(得分:0)

在你的循环中:

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

答案 2 :(得分:0)

试试这个:

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];
}

答案 3 :(得分:0)

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]]