1

我有一个看起来像这样的 javascript 数组:

myFields = [
["fb-method","drop",false,"How did you order?"],
["fb-date","calendar",false,""],
["fb-time","drop",false,""],
["fb-location","drop",false,""],
["fb-amount","text default",false,""],
["fb-share","drop",false,""],
["fb-msg","textarea",true,""],
["next-btn","button",true,""]
]

我能够遍历数组并处理这样的特定位:

len = fields.length;

//first check to make sure required fields are filled in
for(i=0; i<len; i++) {
     a = fields[i];
     if(a[0] != "fb-method") {
        // do stuff
    }
}

如果特定元素不是数组的一部分,特别是看起来像这样的元素,我需要能够(在循环之外)做一些事情:

["fb-location","drop",false,""]

我尝试过使用 jQuery 的.inArray函数,但即使它应该返回 false,它也会返回 true。在这里看小提琴

解决这个问题的最佳方法是什么?jQuery 或标准 js 都可以。

4

3 回答 3

6

$.inArray不返回布尔值,它返回索引(如果不存在匹配,则返回-1)。你会想要这个声明(基于你的 jsfiddle):

if(jQuery.inArray("fb-location", tmp) > -1) {
    alert("it exists");
}
else {
    alert("it doesn't exist");
}

演示:http: //jsfiddle.net/azWLC/2/

更新:

正如评论中提到的,这只是一个解决方案的一半,因为数组是多维的。我建议首先使用$.map()

var tmp = [
["fb-method","drop",false,"How did you order?"],
["fb-date","calendar",false,""],
["fb-time","drop",false,""],
["fb-amount","text default",false,""],
["fb-share","drop",false,""],
["fb-msg","textarea",true,""],
["next-btn","button",true,""]
];
var values = $.map(tmp, function(n, i){
    return n[0];
});

if(jQuery.inArray("fb-location", values) > -1) {
    alert("it exists");
}
else {
    alert("it doesn't exist");
}

演示:http: //jsfiddle.net/azWLC/4/

于 2013-05-17T16:41:08.917 回答
0

jquery.inArray 返回元素的索引。如果未找到,则返回 -1.. 并且除 0 之外的任何数字都为真,因此它说“它存在”

于 2013-05-17T16:42:35.330 回答
0

此外$.inArray,您可以通过Array.filter这种tmp方式使用:

if(  tmp.filter(function(a) {return -~a.indexOf('fb-location');}).length ) {
  // exists
}

提琴手

另请参阅:Array.filterArray.indexOf

使用 JQuery,您将使用 JQuerygrep方法

if(  $.grep(tmp,function(a) {return -~a.indexOf('fb-location');}).length ) {
  // exists
}
于 2013-05-17T17:24:59.973 回答