【问题标题】:checking for an array in an multidimensional array (pref-jQuery)检查多维数组中的数组(pref-jQuery)
【发布时间】:2011-05-28 11:31:48
【问题描述】:

我有一个多维数组,我正在尝试检查它是否包含另一个数组。 我目前正在使用 jQuery.inArray 函数(我正在尝试 Array.prototype 但一直出错,以前从未使用过)。

我试图确保我的父数组不会两次添加相同的子数组

if(jQuery.inArray(new Array(step[0],step[1],r2),unavailArray)==-1){ alert(jQuery.inArray(new Array(step[0],step[1],r2),unavailArray)); unavailArray.push(new Array(step[0],step[1],r2)); }

我也试过

jQuery.inArray("[step[0],step[1],r2]",unavailArray)==-1

jQuery.inArray([step[0],step[1],r2],unavailArray)==-1

它们都返回-1,当我查看数组时,我有

[[630,690,09],[3180,3220,2],[3180,3220,2]]

很明显有些东西不起作用。

【问题讨论】:

    标签: javascript jquery arrays multidimensional-array unique


    【解决方案1】:

    我相信你的问题是你不断为数组添加new Array(),而不是给它们一个变量名来指向它们,因此它们永远不会真正相同,即使它们可能具有相同的确切内容彼此。

    为此,您需要将new Array([step[0],step[1],r2]) 分配给一个变量并检查该变量而不是new Array()

    var blah = new Array(step[0],step[1],r2);
    
    // this will add the array to unavailArray
    if(jQuery.inArray(blah,unavailArray)==-1){
        alert(jQuery.inArray(blah,unavailArray));
    
        unavailArray.push(blah);
      }else{
        alert('found so was not added');
    }
    
    // Try again and it wont, instead firing off the alert message
    if(jQuery.inArray(blah,unavailArray)==-1){
        alert(jQuery.inArray(blah,unavailArray));
    
        unavailArray.push(blah);
      }else{
        alert('found so was not added');
    }
    

    这是我为说明这一点而制作的 JSFiddle 的链接:Live Example

    【讨论】:

    • 如果这对您不起作用,您需要做一些愚蠢的事情,例如将它们转换为字符串(连接)并使用 indexOf。并非真的万无一失的事件。
    • [1, 2, 3] != [1, 2, 3], 但var a1 = [1, 2, 3]; a1 == a1 :D
    • 感谢 subhaze。昨天之前我没见过 JSFiddle。当您创建类似的东西时非常有帮助。从现在开始,我可能会通过 JSFiddle 发帖。干杯。
    • @pedalpete:没问题,JSFiddle 绝对是一个很棒的工具,jsbin.com 也是如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    相关资源
    最近更新 更多