【问题标题】:How to find array in array and remove it?如何在数组中找到数组并将其删除?
【发布时间】:2013-03-04 02:16:40
【问题描述】:
var arr = [["test","1"],["demo","2"]];

// $.inArray() ???
// .splice() ???
// $.each() ???

$("code").html(JSON.stringify(arr));

如果我将通过 "test"(唯一)关键字找到匹配的数组,我将删除 ["test","1"]

所以arr 删除后将是[["demo","2"]]

我该怎么做?

游乐场: http://jsbin.com/ojoxuy/1/edit

【问题讨论】:

    标签: javascript jquery arrays find matching


    【解决方案1】:

    你可以这样做:

    function remove(oldArray, itemName) {
        var new_array = [];
    
        for(var i = 0, len = oldArray.length; i < len; i++) {
            var arr = oldArray[i];
    
            if (arr[0] != itemName) new_array.push(arr);
        }
    
        return new_array;
    }
    

    然后这样称呼它:

    var arr = [["test","1"],["demo","2"]];
    var new_arr = remove(arr,'test');
    

    我在这里做假设,并没有做任何真正的错误检查,但你明白了。

    【讨论】:

    • 我可以使用 remove from arr ,而不是创建一个新数组吗? , 还是谢谢
    • 不改变 Array 对象。查看 Jorge 的回答,splice() 可能是更好的解决方案。
    【解决方案2】:

    可能是这样的:

    for(var i = 0; i < arr.length; i++) {
      if(arr[i][0] == "test") {
       arr.splice(i, 1);
       break;
      }
    }
    

    【讨论】:

    • 我忘了splice() :)
    • 我很抱歉,但@thg435 是更好的答案:( 无论如何谢谢 :D
    • @l2aelba 当然不用担心。我同意filter 似乎更直接。请注意 zeroflagL 对该答案的评论。
    【解决方案3】:

    这就是filter 的用途:

    newArr = arr.filter(function(item) { return item[0] != "test" })
    

    如果您想修改现有数组而不是创建新数组,只需将其分配回去:

    arr = arr.filter(function(item) { return item[0] != "test" })
    

    splice 等修改器方法使代码更难阅读和调试。

    【讨论】:

    • 很好的解决方案,但请注意 ECMAScript 第 5 版的要求。从技术上讲,它总是会创建一个新数组。
    【解决方案4】:

    检查这个

    function rmEl(a,v)
    {
    for(var i=0;i<a.length;i++)
        {
    
          if(a[i][0]==v)
          {
            a.splice(i,i+1);
            i=-1;
          }
          $("code").html(JSON.stringify(a));       
        }
     return a;
    } 
    

    【讨论】:

      【解决方案5】:
      var arr = [["test","1"],["demo","2"]];
      
      function checkArrayElements(a, index, arr) {
        if(a[0]=="test"){
          delete arr[index];
          arr.splice(index,index+1);
        }
      }
      arr.forEach(checkArrayElements);
      $("code").html(JSON.stringify(arr));
      

      注意:这会删除 arr 中所有元素为 0 的内部数组 = "test"

      【讨论】:

        猜你喜欢
        • 2011-03-04
        • 1970-01-01
        • 2012-10-31
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多