Javascript 更改任意给定索引处的数组顺序
给定以下数组Javascript 更改任意给定索引处的数组顺序,javascript,Javascript,给定以下数组 const arr = [13, 6075, 51] 我想以这种方式修改上述数组: 能够在某个索引之前获取“n”个元素 删除这些元素 将它们添加到同一数组的末尾 我已经能够用“切片”来完成这项工作,但是我要在数组的副本上,而不是在数组上修改它自己。简单答案 最简单的解决方案是使用shift和push操作符 shift将从数组的开头删除元素 push将在数组末尾添加一个元素 如果您按顺序执行这两个操作,那么它将从开始处提取一个元素,并将其放在末尾,如下所示: var arr
const arr = [13, 6075, 51]
我想以这种方式修改上述数组:
- 能够在某个索引之前获取“n”个元素
- 删除这些元素
- 将它们添加到同一数组的末尾
shift
和push
操作符
将从数组的开头删除元素shift
将在数组末尾添加一个元素push
var arr = [1, 2, 3, 4];
var element = arr.shift();
arr.push(element);
console.log(arr); // [2, 3, 4, 1]
使用for
循环可以执行此“N”次:
更有效的就地应答
您可以使用Array.prototype.push.apply()一次推送多个元素,如下所示:
var removedElements = arr.splice(0, n);
Array.prototype.push.apply(arr, removedElements);
这是一个“更好”的答案,但需要理解原型——所以我把它留到最后
ES6答案
使用现代JavaScript表示法,您实际上可以执行Array.prototype.push.apply,而不会有任何丑陋之处:
var removedElements = arr.splice(0, n);
ar.push(...removedElements);
可将上述内容转换为一个衬里:
arr.push(...arr.splice(0, n));
函数式编程答案
您正在执行的操作称为阵列上的“旋转”。有时也称为“自行车”。您可能会找到一个函数式编程库,该库将为您提供一个旋转方法,允许编写以下代码:
arr.rotate(n);
我快速浏览了一下,Lodash中请求了这样一个函数,但它被拒绝,并且从未实现过:简单答案
最简单的解决方案是使用shift
和push
操作符
shift
将从数组的开头删除元素
push
将在数组末尾添加一个元素
如果您按顺序执行这两个操作,那么它将从开始处提取一个元素,并将其放在末尾,如下所示:
var arr = [1, 2, 3, 4];
var element = arr.shift();
arr.push(element);
console.log(arr); // [2, 3, 4, 1]
使用for
循环可以执行此“N”次:
更有效的就地应答
您可以使用Array.prototype.push.apply()一次推送多个元素,如下所示:
var removedElements = arr.splice(0, n);
Array.prototype.push.apply(arr, removedElements);
这是一个“更好”的答案,但需要理解原型——所以我把它留到最后
ES6答案
使用现代JavaScript表示法,您实际上可以执行Array.prototype.push.apply,而不会有任何丑陋之处:
var removedElements = arr.splice(0, n);
ar.push(...removedElements);
可将上述内容转换为一个衬里:
arr.push(...arr.splice(0, n));
函数式编程答案
您正在执行的操作称为阵列上的“旋转”。有时也称为“自行车”。您可能会找到一个函数式编程库,该库将为您提供一个旋转方法,允许编写以下代码:
arr.rotate(n);
我快速查看了一下,Lodash中请求了一个类似的函数,但它被拒绝了,并且从未实现过:一种方法是通过拼接
进行删除,这将为您提供删除内容的数组,然后使用推送
将这些内容添加回末尾:
function swap(arr, index) {
const removed = arr.splice(0, index);
arr.push(...removed);
return arr; // Just for chaining, the array is modified in place
}
实例:
const arr=[13,6075,51];
功能交换(arr,索引){
移除常数=阵列拼接(0,索引);
arr.push(…已移除);
返回arr;
}
log(swap([13,6075,51],1));
log(swap([13,6075,51],2))代码>一种方法是通过splice
执行删除操作,这将为您提供一个已删除内容的数组,然后使用push
将这些内容添加回末尾:
function swap(arr, index) {
const removed = arr.splice(0, index);
arr.push(...removed);
return arr; // Just for chaining, the array is modified in place
}
实例:
const arr=[13,6075,51];
功能交换(arr,索引){
移除常数=阵列拼接(0,索引);
arr.push(…已移除);
返回arr;
}
log(swap([13,6075,51],1));
log(swap([13,6075,51],2))代码>您可以更改数组的长度并获取移动值
最后将长度改回原来的长度
函数移动(数组、索引){
常数l=数组长度;
array.length+=索引;
数组.copyWithin(l,0,索引);
数组.copyWithin(0,索引,索引+l);
array.length=l;
}
常量数组=[13,6075,51];
移动(数组,1);
log(…数组)代码>您可以更改数组的长度并获取移动值
最后将长度改回原来的长度
函数移动(数组、索引){
常数l=数组长度;
array.length+=索引;
数组.copyWithin(l,0,索引);
数组.copyWithin(0,索引,索引+l);
array.length=l;
}
常量数组=[13,6075,51];
移动(数组,1);
log(…数组)
您可以使用.slice
two获取这两部分,并使用.concat
返回结果:
const swapPartsAtIndex=(arr=[],index=-1)=>{
if(index=arr.length)返回arr;
返回arr.slice(索引,arr.length).concat(arr.slice(0,索引));
}
设arr=[0,1,2,3,4,5];
arr=swapartsatindex(arr,3);
console.log(…arr);
arr=SwapArtSatindex([0,1,2,3,4,5,6],3);
console.log(…arr)
您可以使用.slice
two获取这两部分,并使用.concat
返回结果:
const swapPartsAtIndex=(arr=[],index=-1)=>{
if(index=arr.length)返回arr;
返回arr.slice(索引,arr.length).concat(arr.slice(0,索引));
}
设arr=[0,1,2,3,4,5];
arr=swapartsatindex(arr,3);
console.log(…arr);
arr=SwapArtSatindex([0,1,2,3,4,5,6],3);
console.log(…arr)代码>
constmyarray=[13,6075,51,44,67,78]
函数移位数组项(arr,索引){
常量移位项=arr.splice(0,索引)
返回arr.concat(移位条目)
}
log(shiftarray条目(myArray,3))
constmyarray=[13,6075,51,44,67,78]
函数移位数组项(arr,索引){
常量移位项=arr.splice(0,索引)
返回arr.concat(移位条目)
}
log(shiftarray条目(myArray,3))
这将完成以下工作:
const shiftArray = (array, idx) => array.concat(array.splice(0, idx));
shiftArray([13, 6075, 51], 1) //[6075, 51, 13]
shiftArray([13, 6075, 51], 2) //[51, 13, 6075]
这将完成以下工作:
const shiftArray = (array, idx) => array.concat(array.splice(0, idx));
shiftArray([13, 6075, 51], 1) //[6075, 51, 13]
shiftArray([13, 6075, 51], 2) //[51, 13, 6075]
请添加您的尝试。怎么了