![](/img/trans.png)
[英]How to shift/rotate an array of items to a specific index in a JavaScript array?
[英]Rotate an array at a specific index in JavaScript
我有一個職位和一組用戶
const position = 2
const users = ["John", "Mary", "Daniel", "Michael"]
我想從位置開始生成一個新數組(或重新排序)。
在 position = 2的情況下,生成的數組應該是
users = ["Daniel", "Michael", "John", "Mary"]
在 position = 3的情況下,生成的數組應該是
users = ["Michael", "John", "Mary", "Daniel"]
在位置0 (無變化)的情況下,生成的數組應保持不變
const users = ["John", "Mary", "Daniel", "Michael"]
我怎樣才能做到這一點?
您可以使用map()
或Array.from()
從索引 + 您的偏移量使用模數運算符創建一個新數組來環繞:
const position = 2 const users = ["John", "Mary", "Daniel", "Michael"] const rotate = (arr, position) => Array.from(arr, (_, index) => arr[(index + position) % arr.length]) console.log(rotate(users, 0)) console.log(rotate(users, 1)) console.log(rotate(users, 2)) console.log(rotate(users, 3))
您可以使用Array#slice
from 0..pos
和 from pos..length
在拆分索引處將數組分成兩個塊。 然后交換塊並將兩個子concat
展開或連接在一起。 取位置的 mod 以保持旋轉在界內。
const rotate = (arr, i) => { i %= arr.length; return [...arr.slice(i), ...arr.slice(0, i)]; }; for (let i = -1; i < 5; i++) { console.log(rotate(["John", "Mary", "Daniel", "Michael"], i)); }
這樣做的簡單方法。
function reorder(arr, pos){
var output = [];
for(var i = pos;i<arr.length;i++){
output.push(arr[i]);
}
for(var i = 0;i<pos;i++){
output.push(arr[i]);
}
return output;
}
不確定這有多有效。 必須有更好的方法來做到這一點。
users.push(users.shift());
...然后按位置編號循環。
const users = ["John", "Mary", "Daniel", "Michael"]; let position; function rotate(array, index){ for(let i = 0; i < index; i++){ array.push(array.shift()); } console.log(`Position: ${index}`); console.log(array); } // Test Zone position = 0; rotate(users, position); position = 1; rotate(users, position); position = 2; rotate(users, position); position = 3; rotate(users, position);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.