簡體   English   中英

在 JavaScript 中的特定索引處旋轉數組

[英]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;
}

不確定這有多有效。 必須有更好的方法來做到這一點。

您可以使用shift() + push()組合

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM