如何确定对象是否在数组中?

Emm*_*myS 1 javascript arrays jquery

我有一个看起来像这样的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,""]
]
Run Code Online (Sandbox Code Playgroud)

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

如果特定元素不是数组的一部分,我需要能够(在循环外)做某事,特别是如下所示:

["fb-location","drop",false,""]
Run Code Online (Sandbox Code Playgroud)

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

最好的方法是什么?jQuery或标准的js很好.

Dom*_*Dom 6

$.inArray不返回bool,它返回索引(如果不存在匹配,则返回-1).你会想要这个陈述(基于你的jsfiddle):

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

演示: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");
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为`.inArray`只有在OP具有对数组元素的引用时才有效,而不仅仅是具有相同内容的数组. (3认同)
  • 只是为了澄清,`-1`在Javascript中是真的. (2认同)
  • 请注意,这只是部分解决方案.该数组是多维的.http://jsfiddle.net/azWLC/3/ (2认同)