我正在尝试从数组中删除元素,同时记住它们的位置并稍后再添加它们。到目前为止,我有这段代码:
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
的状态,而不是绝对{{1}初始状态,可能会导致问题。
例如,如果您删除my_array
和'B'
并添加'D'
和'D'
,则最终会使用'B'
而不是['A', 'B', 'C', 'E', 'D']
。
Here is a jsfiddle showing what the problem is
我应该更改哪些修改['A', 'B', 'C', 'D', 'E']
最终处于初始状态,无论我删除或添加多少元素以及如何添加?
我考虑过在删除时存储有关哪些元素围绕被删除元素的信息,并在添加时将其用作额外信息,但想知道是否有更好的方法。
答案 0 :(得分:1)
我根本不会删除它们:
var my_array = ['A', 'B', 'C', 'D', 'E'];
var removed = [];
function remove_element(letter) {
var i = my_array.indexOf(letter);
if(i > -1) {
removed.push(i);
}
}
function add_element(letter) {
var i = my_array.indexOf(letter);
if(i > -1) {
removed.splice(removed.indexOf(i), 1);
}
}
function get_array() {
return my_array.filter(function(x, i) {
return removed.indexOf(i) === -1;
});
}