1

次のようなデータを持つ JSON オブジェクトがあるとします (別の .json ファイル内):

evidenceStrings = [
{"jokeid": 0, "evidence": ["\My God you're right! I never would've thought of that!", "this look that says \My God you're right! I never would've thought of that!\", " \My God you're right! I never would've thought of that!\"]},
{"jokeid": 1, "evidence": ["the man didn't have to watch"]},
{"jokeid": 2, "evidence": ["knocking down trees with your face", "knocking down trees with your face. ", " knocking down trees with your face. ", "with your face.", "knocking down trees with your face"]}
]

「証拠」をHTMLファイルで表示したい。問題は、別の .js ファイルからコンテンツを読み取り、そのコンテンツを for ループを使用して表示していることです。

for(var i = 0; i < jokes.length; i++) {
    // display string at index 0 of an array in a .js file

iここではjokeid、JSON オブジェクト内の を参照します。今私が欲しいのは、指定された に対して、JSON オブジェクトからimy を抽出evidenceし、それを表示することです (できれば、すべての文字列の後に改行を付けて)。

4

2 に答える 2

1

これにはevidenceStrings、一致するjokeidが見つかるかどうかを確認するためにループする必要があります。でこれをうまく行うことができます.filterが、内部的には本質的に同じことを行います。

for (var x = 0; x < jokes.length; x++) {
    var id = jokes[x];
    evidence = evidenceStrings.filter(function (elem) {
        return +elem.jokeid == id;
    });
    if (evidence.length == 1 && evidence[0].hasOwnProperty('evidence')) {
        console.log(evidence[0].evidence.join("\n"));
    }
}

http://jsfiddle.net/cFsze/

于 2013-02-14T21:06:51.223 に答える
0

これらを単純化するためにアンダースコアを使用します(http://underscorejs.org/):

var foundJoke = _.find(evidenceStrings,function(item) {
   return item.jokeid === 0;
});

var firstItem = _.first(foundJoke.evidence);    
if(_.isArray(foundJoke.evidence)) alert(foundJoke.evidence.join('\n'));

また

var foundJoke = _.findWhere(evidenceStrings,{jokeid:0});
于 2013-02-14T21:12:38.570 に答える