通过数字增加(或减少)所有javascript索引

时间:2018-05-04 10:43:29

标签: javascript

我有一个像这样的数组:

array = [1,2,3,4]
console.dir(array)

指数位置

array[0] = 1, array[1] = 2, array[2] = 3, array[3] = 4. 

我想做的是将所有索引向上移动2,而不更改值得到:

array[2] = 0, array[3] = 1, array[4] = 2, array[5] = 3

我正在添加我的解决方案以防万一没有更好的选择,但如果有一个单行代码我就不会感到惊讶。理想情况下,它会更新原始数组,而不是将其输入新数组。

3 个答案:

答案 0 :(得分:1)

带有数组连接的较短版本(假设您在第一个位置使用undefined可以,因为这是您在示例中所做的事情)

array = [0,1,2,3];
array2 = [undefined, undefined];

array = array2.concat(array);

console.dir(array);

答案 1 :(得分:1)

  

但是如果有一个单行班的话,我不会感到惊讶。理想情况下,它会更新原始数组,而不是将其输入新数组。

是一个单行,但我并不是说我会在实际代码中使用它,尤其是因为滥用了逗号运算符:--)



const array = [1,2,3,4];

Object.keys(array).reverse().forEach(key => (array[+key+2] = array[key], delete array[key]));

console.log(array);




或者你说你不是因为你是否得到一个新阵列而感到困惑;您可以使用reduce和逗号运算符(

)通过(ab)获得单行代码



const array = [1,2,3,4];

const new_array = array.reduce((a, e, i) => (a[i+2] = e, a), []);

console.log(new_array);




我是无聊的人,我可能只是使用一个循环:



const array = [1,2,3,4];

for (let n = array.length - 1; n >= 0; --n) {
  array[n+2] = array[n];
  delete array[n];
}

console.log(array);




答案 2 :(得分:0)

一种方法: -

array = [0,1,2,3]
new_array = [];
array.forEach(function(element,index){
  new_array[index+2]=element
});
array = new_array;
console.dir(array);