【问题标题】:Javascript: how to remove second level array by top level index?Javascript:如何通过顶级索引删除二级数组?
【发布时间】:2013-11-30 19:37:36
【问题描述】:

我在 javascript 中有一个嵌套数组。顶层有一个数字索引,第二层数组包含各种数据。我希望能够使用顶级索引从数组中删除一个元素。

    var my_array = [];

    my_array[12] = ['cheese', 'egg', 'ham'];
    my_array[24] = ['balloon', 'frog'];
    my_array[33] = ['chicken', 'goose'];

如何删除 my_array[24]?我曾尝试将 splice 与 $.inArray 一起使用,但 inArray 将索引返回为 -1。由于浏览器的限制,我不想使用 indexOf - 我认为它会给我带来与 inArray 相同的问题。

谢谢!

【问题讨论】:

  • 你的解释对我来说很尴尬......你能准确地显示你拥有的数组和你需要的数组吗?
  • 如果我理解正确:delete my_array[24];
  • @adeneo delete 不会影响length。但是,属性/索引将被删除/undefined
  • @JonathanLonowski - 在这种特殊情况下,长度将为 34,因为这就是真正有多少索引。

标签: javascript arrays multidimensional-array splice


【解决方案1】:

如果想通过已知索引 1 从主数组索引 24 中删除 frog

myArray[24].splice(1,1);

如果想在任何地方搜索frog 并删除父级。

var term='frog';
my_array=$.grep(my_array,function(element,i){
     return $.inArray( term, element) !=-1;
}

【讨论】:

    【解决方案2】:

    创建一个函数:

    function deleteByIndex(arr, index) {
        var new_arr = [];
        for (var i=0; i<arr.length; i++) {
            if (arr[i] && i!=index) {
                new_arr[i] = arr[i];
            }
        }
        return new_arr;
    }
    

    FIDDLE

    将其称为var new_array = deleteByIndex(my_array, 24);

    【讨论】:

    • 您的方法有效,但比我标记为正确答案的方法复杂。
    【解决方案3】:

    my_array.splice(24, 1); 将删除 index = 24 处的项目。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

    【讨论】:

    • @DavidHealey 很高兴为您提供帮助。
    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2016-08-05
    • 2021-09-23
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多