1

配列リテラルからプロパティ値を適切に取得する方法について、私はよくわからないままです。

オブジェクトリテラル:

var obj = {
    "p1": "v1",
    "p2": "v2",
    "p3": "v3"
};

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        console.log(key + " -> " + obj[key]);
    }
}

コンソール ログ出力:

p1 -> v1
p2 -> v2
p3 -> v3

配列リテラル:

var obj = [
    { "pa":"va1", "pb":"vb1" },
    { "pa":"va2", "pb":"vb2" },
    { "pa":"va3", "pb":"vb3" },
    { "pa":"va4", "pb":"vb4" }
];

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        console.log(key + " -> " + obj[key]);
    }
}

コンソール ログ出力 (当たり前!):

0 -> [object Object]
1 -> [object Object]
2 -> [object Object]
3 -> [object Object]

私がやろうとしているのは、文字列がいずれかの と一致するかどうかを確認することpaです。もしそうなら、何かをしてください。

これはロジックになります:

var myString = "a value I'm getting from somewhere else ;)"
if (myString == any of the pa values) {
    // do something
}

どんな助けでも大歓迎です!

4

4 に答える 4

4

filterメソッド (リンクには、IE8 以前の古いブラウザーに機能を追加するためのコードが含まれています) を使用して、結果の配列の長さを確認します。

var obj = [
    { "pa":"va1", "pb":"vb1" },
    { "pa":"va2", "pb":"vb2" },
    { "pa":"va3", "pb":"vb3" },
    { "pa":"va4", "pb":"vb4" }
];

var filtered = obj.filter(function(element) { 
    return element.pa === myString;
});

if (filtered.length > 0) {
   // contains string
}

JSフィドル

于 2013-09-12T15:04:55.527 に答える
2

obj期待どおりのオブジェクトではなく、オブジェクトの配列です。配列を反復してから、各配列項目のキーを反復する必要があります。

var i, key;

for (i = 0; i < obj.length; i++) {
  for (key in obj[i]) {
    if (obj[i].hasOwnProperty(key) {
      console.log(key + " -> " + obj[i][key]);
    }
  }
}
于 2013-09-12T15:02:51.507 に答える
0

親を知る必要がない場合は、すべてをループしないことでパフォーマンスが向上する可能性があります (配列とオブジェクトのサイズによって異なります) これにより、別のネストされたレベルのオブジェクトが追加された場合にコードを変更する必要もなくなります。

JSON.stringify(obj).indexOf(':"pa1"')>-1

JSON.stringify()配列を次のような文字列に変換します。

"[{"pa":"va1","pb":"vb1"},{"pa":"va2","pb":"vb2"},{"pa":"va3","pb":"vb3"},{"pa":"va4","pb":"vb4"}]"

もちろん、通常のテキスト検索を実行できます

JSON.stringify() は IE8 以降でサポートされています

于 2013-09-12T15:05:16.200 に答える