【问题标题】:using the "in" operator for two dimensional array with javascript将“in”运算符用于带有 javascript 的二维数组
【发布时间】:2012-07-13 08:34:14
【问题描述】:

所以我定义了如下数组:

        var a = new Array();
            a[1] = new Array();

            a[1][0] = "Computer Science";
            a[1][1] = "Computer Engineering";
            a[1][2] = "Aerospace Engineering";
            a[1][3] = "Engineering (Other)";
            a[1][4] = "Web Development";
            a[1][5] = "Computer Programming";
            a[1][6] = "Android Development";
                    //a[2] through a[n] defined similarly

有一次,我正在尝试测试一个字符串是否包含在 a[i] 中的任何位置,比如“计算机科学”,所以我执行以下操作:

                 for(j=1; j<n; j++)
                    if("Computer Science" in a[j])
                    {
                              //DO SOMETHING
                    }

但是,这总是返回 false,但我已经验证 a[j] 实际上包含字符串(在 a[j][0] 中)。知道为什么会这样吗?

【问题讨论】:

  • 回到基础。试试这个:alert('Computer Science' in ['Computer Science']);。没有!此外,new Array() 可能应该只是 [],如 var a = [];
  • 为什么是 [1]?无论如何,像同时提到的 ErikE 那样做var a=[["computer...","computer...",...["android...]] 会更优雅

标签: javascript arrays string multidimensional-array operators


【解决方案1】:

in operator 用于测试对象上是否存在属性(名称)。例如,"5" in a[j] 为真 - 数组有一个索引 5

您想使用indexOf method 来检查一个元素是否存在于数组中:

if (a[j].indexOf("Computer Science") > -1)
    //DO SOMETHING

【讨论】:

  • Array.indexOf 并非在所有浏览器中都可用,尤其是在 IEdeveloper.mozilla.org/en/JavaScript/Reference/Global_Objects/…
  • 对 IE 感到羞耻,我只能说 :-) 我的答案是否需要包含 shim 才能完整?
  • 垫片在我评论的链接中,所以我拒绝。你本可以在你的回答中指出这一点。不幸的是,IE 仍然是 Web 开发人员无法避免的麻烦
【解决方案2】:

这行得通:

var a = [];
a[0] = [];
a[1] = [];

a[1][0] = "Computer Science";
a[1][1] = "Computer Engineering";
a[1][2] = "Aerospace Engineering";
a[1][3] = "Engineering (Other)";
a[1][4] = "Web Development";
a[1][5] = "Computer Programming";
a[1][6] = "Android Development";

for(j=0; j<a.length; j++) {
    if("Computer Science" in oc(a[j])) {
       alert("test");               
    }
}

function oc(a)
{
  var o = {};
  for(var i=0;i<a.length;i++)
  {
    o[a[i]]='';
  }
  return o;
}

http://jsfiddle.net/SRPEU/

【讨论】:

    猜你喜欢
    • 2016-03-09
    • 2021-09-17
    • 2018-09-23
    • 1970-01-01
    • 2020-11-04
    • 2012-03-25
    • 2017-10-30
    • 2016-03-31
    • 2022-01-17
    相关资源
    最近更新 更多