[英]Moving random items from one array to another in Javascript
我有一個名為availableCars
的數組,它有大約 500 個元素。 用戶可以選擇其中的一些(比方說 200,隨機)並“保留”這些汽車。
因此,我需要 onclick 將所有這些選定的項目從availableCars
數組移動到reservedCars
數組。
迭代所有項目並進行splice
以將它們從第一個數組中刪除並將元素推送到第二個數組似乎很復雜,但我不確定是否有更好和最佳的方法。
建議?
PS我想出的解決方案如下:
public moveCarsAround(selectedElements): void {
// Add all selected elements to the reservedCars list.
this.reservedCars = this.reservedCars.concat(this.availableCars.filter((car) =>
selectedElements.indexOf(car.id) !== -1
));
// Remove all selected elements from availableCars list.
this.availableCars = this.availableCars.filter((car) =>
selectedElements.indexOf(car.id) === -1
);
}
您不必每次想要將元素移出可用的cars 數組時都更新它——您可以在操作結束時更新它。 我假設您將用戶選擇的汽車放入對象或地圖中,以便您可以快速查看密鑰是否存在。 你可以:
因此,在選項 1 中,您只需在最后拼接一次。 在選項 2 中,您重新分配變量以使用新數組。 以下代碼顯示了一個示例,其中包含 2 個用戶選擇的 5 輛車(比例差異為 100 倍,但您應該能夠很好地適應它)。 它突出顯示第一種方法,注釋掉第二種方法。
let availableCars = ['Car 1', 'Car 2', 'Car 3', 'Car 4', 'Car 5'];
let reservedCars = [];
let userPicks = {
'Car 2': 1,
'Car 4': 1
};
let length = availableCars.length;
// let newAvailableCars = []; // or use this
for (let i = 0; i < length; i++) {
if (userPicks[availableCars[i]]) {
reservedCars.push(availableCars[i]);
} else {
availableCars.push(availableCars[i]);
// newAvailableCars.push(availableCars[i]); // with this
}
}
availableCars.splice(0, length);
// availableCars = newAvailableCars; // and this
console.log(reservedCars); // --> [ 'Car 2', 'Car 4' ]
console.log(availableCars); // --> [ 'Car 1', 'Car 3', 'Car 5' ]
考慮使用長度等於availableCars
布爾值創建另一個名為isCarAvailable
數組。 然后,您可以避免對availableCars
數組進行大量操作,例如刪除或添加元素,而是將isCarAvailable
中car number k
的索引更新為 1 表示 true(可用),否則更新為 0。
創建數組reservedCars[i][j]
,其中包含用戶 ID i
(從 0 或 1 向上索引)和j
作為保留的汽車數量。 初始化時:將 i 的最大值設置為可用汽車的數量( length(availableCars)
),將 j 設置為一個用戶 ID 可以保留的最大汽車數量。
如果您絕對需要移動項目,我建議使用列表而不是數組,因為它們更適合插入/刪除項目: Javascript 中的鏈表與數組
否則,我建議使用 Bent 的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.