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

标签 javascript arrays element add

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

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,无论我删除或添加了多少元素以及如何删除或添加,我都应该更改哪些修改以使其最终处于其初始状态?

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

最佳答案

我根本不会删除它们:

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

关于javascript - 删除数组元素并将它们添加回原来的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11651442/

相关文章:

javascript - jquery 每个循环检查是否至少有一个字段已被填充

javascript - 在 Angular js 应用程序中实现甘特图的最有效方法是什么?

Javascript - 根据过滤器对象中存在的任何深度的属性过滤对象数组的通用解决方案

c - 我正在尝试解决这个问题,我已经尝试过,但我不知道如何通过代码或逻辑解决这个问题

ios - 如何访问变量名称并将字符串更改为它

element - cvc-complex-type.2.4.c : The matching wildcard is strict, 但找不到元素 'oxm:jaxb2-marshaller' 的声明

javascript - 插槽内子组件中的触发方法,$refs 不起作用

php - 无法获取 Radio 元素的值

angular - 将元素引用传递给 angular2 中的方法

javascript - 使用 DOM javascript 设置事件