我正在尝试解决此编码挑战,并想知道为什么我的代码无效。请让我知道问题所在并提出替代解决方案。
以下是问题: 创建一个名为'reversedLooper'的函数,当传递一个数组时,它将向后循环并从最后一个元素中减去2,从第二个到最后一个减去1,从第二个到第三个减去0,从第四个添加到最后一个,添加2到第五个到最后,等等,直到它到达阵列的前面。完成后返回列表
这是我的解决方案
var arr = [2, 3, 3, 5, 7, 19];
var difference = [];
var arr3 = [];
//the function below is working correctly in the way I intend...
function arrayCreator (arr3) {
var i;
for(i = arr.length - 3; i >= -2; i--) {
arr3.push(i);
}
return arr3;
}
function reversedLooper (arr) {
var i;
for(i=0; i< arr.length; i++) {
var pusher = arr[i] - arr3[i];
difference.push(pusher);
}
return difference;
}
console.log(reversedLooper(arr));
// answer should be [5, 5, 4, 5, 6, 17] in this case
答案 0 :(得分:3)
您可以使用map()
功能和reverse()
功能:
count = -3;
finalArray = [2, 3, 3, 5, 7, 19]
.reverse()
.map(function (obj) {
count++;
return obj + count;
})
.reverse();
在控制台上执行会给出:
» count = -3; [2, 3, 3, 5, 7, 19].reverse().map(function (obj) { count++; return obj + count; }).reverse()
« [5, 5, 4, 5, 6, 17]
<强>段强>
count = -3;
final = [2, 3, 3, 5, 7, 19].reverse().map(function(obj) {
count++;
return obj + count;
}).reverse();
alert(final.join());
答案 1 :(得分:1)
您可以创建一个从2开始的辅助变量,并在每次迭代时递减它,看看:
function reversedLooper(arr) {
for (var i = arr.length - 1, numToSum = 2; i >= 0; i--, numToSum--) {
arr[i] = arr[i] - numToSum;
}
}
var arr = [2, 3, 3, 5, 7, 19];
reversedLooper(arr);
document.write(arr);
答案 2 :(得分:1)
您的代码只是在没有调用的情况下声明arrayCreator函数。
此外,var pusher = arr[i] + arr3[i];
编辑了这两件事,您的代码也可以使用。
答案 3 :(得分:0)
将reverseLooper函数更改为:
function reversedLooper(arr){
var x=-2;
for(var i=arr.length-1;i>=0;i--)
{
arr[i]+=x;
x++;
}
return arr;
}