Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript反转数字数组,然后减去2,然后1,然后0,然后加1,再加2等等_Javascript - Fatal编程技术网

Javascript反转数字数组,然后减去2,然后1,然后0,然后加1,再加2等等

Javascript反转数字数组,然后减去2,然后1,然后0,然后加1,再加2等等,javascript,Javascript,很抱歉这个糟糕的标题。我已经崩溃了足够多的浏览器并请求帮助 这是我试图解决的具体问题 创建一个名为“reversedLooper”的函数,当传递该函数时,数组将向后循环并从最后一个元素中减去2,从第二个元素到最后一个元素减去1,从第三个元素到最后一个元素减去0,从第四个元素到最后一个元素加1,从第五个元素到最后一个元素再加2,等等,直到到达数组的前面。完成后返回列表使用以下工具很容易: 这很容易: 它确实很难看,但似乎满足测试用例 var array = [1,2,3,4,5,6,7,8,9,1

很抱歉这个糟糕的标题。我已经崩溃了足够多的浏览器并请求帮助

这是我试图解决的具体问题

创建一个名为“reversedLooper”的函数,当传递该函数时,数组将向后循环并从最后一个元素中减去2,从第二个元素到最后一个元素减去1,从第三个元素到最后一个元素减去0,从第四个元素到最后一个元素加1,从第五个元素到最后一个元素再加2,等等,直到到达数组的前面。完成后返回列表

使用以下工具很容易:

这很容易:


它确实很难看,但似乎满足测试用例

var array = [1,2,3,4,5,6,7,8,9,10,11,12,13];
function reversedLooper(array) {
    var newArray = [];
    var n = -3;
    for (var i = array.length - 1; i >= 0; i--) {
      n++;
        if (array[i] === array.length) {
            newArray.push(array[i] - 2);
        }
        else if (array[i] === array.length - 1) {
            newArray.push(array[i] - 1);
        }
        else if (array[i] === array.length - 2) {
            newArray.push(array[i]);
        }
        else {
            newArray.push(array[i] + n)
        }
    }
    return newArray;
}
console.log(reversedLooper(array));

它确实很难看,但似乎满足测试用例

var array = [1,2,3,4,5,6,7,8,9,10,11,12,13];
function reversedLooper(array) {
    var newArray = [];
    var n = -3;
    for (var i = array.length - 1; i >= 0; i--) {
      n++;
        if (array[i] === array.length) {
            newArray.push(array[i] - 2);
        }
        else if (array[i] === array.length - 1) {
            newArray.push(array[i] - 1);
        }
        else if (array[i] === array.length - 2) {
            newArray.push(array[i]);
        }
        else {
            newArray.push(array[i] + n)
        }
    }
    return newArray;
}
console.log(reversedLooper(array));

基于我的评论,我将使用新的fiddle插件来制作一些东西,在这里向您展示

let list=Immutable.list.of(1,2,3,4,5)
函数createListOperationsMapping(列表){
/或者考虑动态创建方法到索引的映射
//如果从中返回类似以下内容的地图:
/*
地图({
0:(项目)=>项目-2,
1:(项目)=>项目-1,
//因为有一种情况,你减去0,所以没有变化
2:(项目)=>项目,
3:(项目)=>项目+1,
4:(项目)=>项目+2,
5:(项目)=>项目+3,
//等等。。。
})
*/
//这将允许您映射reversedList,并基于索引
//从映射中调用该方法。。。
//这样(上面的映射^^称为listOperationMap)
/*
var mutatedReversedList=reversedList.map((项目,索引)=>{
返回listOperationMap[索引](项);
})
注意我在这里用了“mutated”这个词如果你用的是Immutable,
实际上,您返回的是一个带有更新的副本,而不是一个变种,
但我想说清楚的是
不可变列表将是一个新的不可变列表,而不是变异的列表
上一个列表。另外,如果您选择使用Immutable,请记住
您需要为更新的返回值设置新变量
不变的数据结构。
*/
}
让reversedList=list.reverse()
设reversedListSize=reversedList.size
让newList=reversedList.map((listItem,index)=>{
//在这里做事
})
console.log(list.toJS())
console.log(reversedList.toJS())
console.log(反向列表大小)

基于我的评论,我将使用新的fiddle插件制作一些东西,在这里向您展示

let list=Immutable.list.of(1,2,3,4,5)
函数createListOperationsMapping(列表){
/或者考虑动态创建方法到索引的映射
//如果从中返回类似以下内容的地图:
/*
地图({
0:(项目)=>项目-2,
1:(项目)=>项目-1,
//因为有一种情况,你减去0,所以没有变化
2:(项目)=>项目,
3:(项目)=>项目+1,
4:(项目)=>项目+2,
5:(项目)=>项目+3,
//等等。。。
})
*/
//这将允许您映射reversedList,并基于索引
//从映射中调用该方法。。。
//这样(上面的映射^^称为listOperationMap)
/*
var mutatedReversedList=reversedList.map((项目,索引)=>{
返回listOperationMap[索引](项);
})
注意我在这里用了“mutated”这个词如果你用的是Immutable,
实际上,您返回的是一个带有更新的副本,而不是一个变种,
但我想说清楚的是
不可变列表将是一个新的不可变列表,而不是变异的列表
上一个列表。另外,如果您选择使用Immutable,请记住
您需要为更新的返回值设置新变量
不变的数据结构。
*/
}
让reversedList=list.reverse()
设reversedListSize=reversedList.size
让newList=reversedList.map((listItem,index)=>{
//在这里做事
})
console.log(list.toJS())
console.log(reversedList.toJS())
console.log(反向列表大小)

这是一个更简短的版本

function reversedLooper(arr){
  var increaseBy = -2;
  for(var i = arr.length - 1; i >= 0; i--){
    arr[i] += increaseBy;
    increaseBy++
  }
  return arr;
}

这是一个更简短的版本

function reversedLooper(arr){
  var increaseBy = -2;
  for(var i = arr.length - 1; i >= 0; i--){
    arr[i] += increaseBy;
    increaseBy++
  }
  return arr;
}

请展示你试过的东西。这不是一项代码编写服务……其目的是让您展示您遇到问题的代码,以便人们能够帮助解决这些问题。首先,您应该始终发布您尝试过的代码,以便我们能够看到您在哪里出错或需要帮助。:-)其次,您应该能够获得数组的长度(array.length),从0到N执行一个普通FOR循环,然后使用一个变量将其反转。因此,如果您对(var i=0;iApologies)执行操作,下面是我尝试过的。我知道这只是反转了数组,并没有实际操作索引的值。我尝试执行嵌套FOR循环来调整减/加的量,但一直使浏览器崩溃。函数reversedLooper(array){var newArray=[];FOR(var i=array.length;i>0;i--){newArray.push(i);}return newArray;}console.log(reversedLooper([1,2,3,4]);您是否尝试过使用Immutable.js?我知道使用Immutable可以执行以下操作:
var list=Immutable.list([1,2,3]);var reversedList=list.reverse()
。这样可以使用反向列表,然后可以映射列表并根据列表中的索引应用所需的逻辑。然后,完成后,再次调用反向并调用
toJS()
你有一些问题要解决。我会放一把小提琴来展示。请展示你尝试过的东西。这不是一项代码编写服务……你的想法是展示你遇到问题的代码,这样人们就可以帮助解决这些问题。首先,你应该始终发布你尝试过的代码,这样我们就可以看到你在哪里犯了错误或需要解决问题第二,你应该能够得到数组的长度(array.length),在0到N之间做一个普通的FOR循环,然后有一个变量将其反转。如果你对(var i=0;iApologies)做了,这是我尝试过的。我知道这一点