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

$.inArraybool を返さず、インデックスを返します (一致するものが存在しない場合は を返します-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

この方法で$.inArray使用できるほかに:Array.filtertmp

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

Jsフィドル

参照: Array.filterArray.indexOf

JQuery を使用する場合は、JQuerygrepメソッドを使用します。

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

jquery.inArray は要素のインデックスを返します。見つからない場合は -1 を返します。また、0 以外の任意の数値が true であるため、「存在する」と表示されます

于 2013-05-17T16:42:35.330 に答える