从数组中减去编码挑战

时间:2015-10-13 02:49:34

标签: javascript arrays

我正在尝试解决此编码挑战,并想知道为什么我的代码无效。请让我知道问题所在并提出替代解决方案。

以下是问题: 创建一个名为'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

4 个答案:

答案 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;
}