0

ここではあまり運がありません。

単純な配列があり、その配列の 1 つのフィールドで検索しています。もともとkey:valueに設定していたのですが、なぜか正しく変数にデータを返すことができませんでした。

私のコード(適切な測定のためにいくつかの配列要素を含む)は次のとおりです。

var laptopsArray = []; 
laptopsArray[0] = ['123','Missing','CON','L'];
laptopsArray[1] = ['124', 'Home', 'BAT', 'I'];
laptopsArray[2] = ['125', 'Missing', 'CON', 'O'];

laptops = [];
for (i = 0; i < laptopsArray.length; i++) {
    $.grep( laptopsArray[i], function( n, i ) {
    laptops.push ( n === 'BAT');
    });
}

console.log(laptops);

(上記のように)「BAT」を検索すると、コンソールに次のものが返されます。

[false, false, false, false, false, false, true, false, false, false, false, false] 

もちろん、これは完全なトッシュであり、私が期待しているものではありません。明らかに、各配列要素の各リーフで反復しています。そして真偽を吐き出す。右?実際、親切に私にお願いしているのは、配列のインデックスです。

http://jsfiddle.net/rmacd/YUsBR/

4

3 に答える 3

1

$.grep別の配列を調べるために使用する条件に基づいて配列を作成します

あなたがしたい

var newArray= $.grep( laptopsArray, function( n, i ) {
      /* return true or false using a test*/
      return $.inArray( 'BAT', n) !=-1;
  })

DEMO

于 2013-11-12T18:11:57.150 に答える
1
laptops = $.grep(laptopsArray, function(arr) {
    return ~$.inArray("BAT", arr);
});

$.grep基本的に の jQuery バージョンですArray.prototype.filter。したがって、外側の配列を grep し、ネストされた各配列の値をチェックした結果を返す必要があります。


ネイティブの ECMAScript 5 コードでは次のようになります。

laptops = laptopsArray.filter(function(arr) {
    return ~arr.indexOf("BAT");
});

この~トリックは、テストが返されなかったことを確認する簡単な方法です-1。もしそうなら、それは に変換されますが0、これは誤りです。

于 2013-11-12T18:11:05.333 に答える