我有一个像这样的数组:
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
我正在添加我的解决方案以防万一没有更好的选择,但如果有一个单行代码我就不会感到惊讶。理想情况下,它会更新原始数组,而不是将其输入新数组。
答案 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
和逗号运算符(
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);