我想從數組中刪除元素,同時記住它們的位置並稍後添加它們。到目前爲止,我有這段代碼:刪除數組元素,並將它們添加回它們所在的位置
var my_array = ['A', 'B', 'C', 'D', 'E'];
var removed_elements = [];
// Assuming letter provided exists in my_array
function remove_element(letter) {
for (var index in my_array) {
if (my_array[index] == letter) {
break;
}
}
var removed_element = {
index: index,
letter: letter
}
removed_elements.push(removed_element);
my_array.splice(index,1);
}
// Assuming letter provided exists in removed_elements
function add_element(letter) {
for (var index in removed_elements) {
console.log('test');
if (removed_elements[index].letter == letter) {
console.log(removed_elements[index]);
break;
}
}
my_array.splice(removed_elements[index].index,0,removed_elements[index].letter);
}
它工作正常,只要我刪除了1元的時間和移除另一個之前將其重新添加。但是,當我開始連續刪除多個元素時,爲刪除的元素(不是第一個,而是後面的元素)保存的索引相對於刪除時的狀態my_array
而不是絕對的my_array
的初始狀態,它可以造成問題。
例如,如果您刪除'B'
和'D'
並添加'D'
和'B'
,你最終['A', 'B', 'C', 'E', 'D']
,而不是['A', 'B', 'C', 'D', 'E']
。
Here is a jsfiddle showing what the problem is
我應該改變什麼修改爲my_array
結束了在它的初始狀態,無論諸多元素我刪除或添加,以及如何?
我想過在刪除時存儲有關圍繞已刪除元素的哪些元素的信息,並在添加回來時將其用作額外信息,但是想知道是否有更好的方法。
我不知道這是很有可能的。我不知道你是如何使用這段代碼,而是想想事件的順序。如果某些字母被刪除並放回到其他字母之前,那麼關於每個刪除的字母存儲什麼「原始」信息都無關緊要 - 不能保證陣列的當前狀態與原始狀態相同。如果你的要求是某些字母被一次刪除,然後你立刻把它們全部放回去,那應該不會壞。如果沒有特定的事情發生順序,這應該是艱難的。 – Ian 2012-07-25 14:17:17