我真的不知道如何解釋我的問題,所以對標題感到抱歉。
我有三個 JavaScript 陣列:
originalData = ['data1', 'data2', 'data3']
originalPos = ['50 a', '80 b', '31 c']
newData = ['data1', 'data3', 'data2']
使用這些陣列,我想通過使用 newData 陣列來獲取 originalPos 陣列的新順序,如下所示:
originalPos = ['50 a', '31 c', '80 b']
目標是能夠使用 L.routing.machine.spliceWaypoints() 在 Leaflet Routing Machine 中更改我的航點的位置
uj5u.com熱心網友回復:
您可以通過查找 in 中每個元素的位置來重新排列,originalPos并originalData使用相應的位置將元素從newData結果陣列中推入。
假設所有三個陣列中都沒有重復資料
const originalData = ['data1', 'data2', 'data3']
const originalPos = ['50 a', '80 b', '31 c']
const newData = ['data1', 'data3', 'data2']
const newPos = newData.map(n => n && originalPos[originalData.indexOf(n)]);
console.log(newPos);
uj5u.com熱心網友回復:
記下原始鍵出現的索引originalData(使用 Map 或普通物件)。然后將新順序 ( newData) 中的鍵映射到該映射中的索引,并在輸入資料 ( originalPos) 中獲取該索引處的值:
const originalData = ['data1', 'data2', 'data3'];
const originalPos = ['50 a', '80 b', '31 c'];
const newData = ['data1', 'data3', 'data2'];
const map = new Map(originalData.map((val, i) => [val, i]));
const result = newData.map((val, i) => originalPos[map.get(val)]);
console.log(result);
注意:使用映射將避免在每次迭代時掃描第一個陣列(如 with indexOf),因此具有更好的時間復雜度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/491822.html
標籤:javascript 数组 传单
上一篇:計算按鈕上的每個值
