删除数组元素并将它们添加回原来的位置

Remove array elements and add them back to where they were

本文关键字:原来 位置 添加 数组元素 删除      更新时间:2024-02-25

我试图从数组中删除元素,同时记住它们的位置,稍后再添加回来。到目前为止,我有一段代码:

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);
}

只要我一次删除一个元素,并在删除另一个元素之前将其添加回来,它就可以正常工作。但是,当我开始连续删除多个元素时,为已删除的元素(不是第一个,而是后续元素)保存的索引与删除时my_array的状态相关,而不是与my_array的初始状态绝对相关,这可能会导致问题。

例如,如果删除'B''D'并添加'D''B',则最终得到的是['A', 'B', 'C', 'E', 'D']而不是['A', 'B', 'C', 'D', 'E']

这里有一个jsfiddle显示的问题

对于my_array,无论我删除或添加了多少元素,我都应该更改哪些修改,以使其最终处于初始状态,以及如何更改

我想过在删除时存储被删除元素周围的元素信息,并在添加时将其用作额外信息,但不知道是否有更好的方法。

我根本不会删除它们:

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;
    });
}