我必须操作一个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?
谢谢!
答案 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]]