-1

例を考えてみましょう:

food : {
    cheese: { taste: "delicious", smell: "smelly" },
    bacon:  { taste: "godly", smell: "godly" }
}

「食品」のプロパティ (チーズおよび/またはベーコン) のいずれかが「敬虔な」「味」を持っているかどうかを確認するループレス テストが必要です。

この場合、イエスでしょう。「うんざり」のテストは、味があるものがないため、false になるはずです: 「うんざり」

私の質問は、ループのいくつかのレイヤー内の100のプロパティjsonが悪いため、実際にはループのないソリューションを中心に展開しています:(

4

3 に答える 3

3

「食品」のプロパティ (チーズおよび/またはベーコン) のいずれかが「敬虔な」「味」を持っているかどうかを確認するループレス テストが必要です。

できません。JSON をオブジェクト グラフにデシリアライズしたと仮定すると、オブジェクトを個別にテストする必要があるため、ループが必要になります。

JSON をオブジェクト グラフにデシリアライズしていない場合(または、そのグラフを にフィード バックしたい場合JSON.stringify、お勧めしませんが — ループが発生するため)、まだテキストがある場合は、正規表現で可能です。例:

if (jsontext.match(/\b"taste"\s*:\s*"godly"/) {
    // ...something has a taste that is "godly"
}

上記では、有効な JSON を想定していることに注意してください。tasteJSONで必要な二重引用符で囲まれていないため、質問には有効なJSONがありません。

私の質問は、ループのいくつかのレイヤー内の100のプロパティjsonが悪いため、実際にはループのないソリューションを中心に展開しています:(

それなら、JSON の責任者に再設計してもらう必要があります。

于 2013-09-13T22:18:50.147 に答える
2

一度ループすることで、すべてのデータを事前にインデックス化できます。

var tastes = {}, smells = {};
for (var prop in food) {
    if (food.hasOwnProperty(prop) {
        var item = food[prop];
        if (!tastes[item.taste]) { tastes[item.taste] = [] };
        tastes[item.taste].push(prop);
        if (!smells[item.smell]) { smells[item.smell] = [] };
        tastes[item.smell].push(prop);
    }
}

そして、将来的には、次のことができます。

if (tests.godly) { ... }

…これにより、クエリを実行するたびにデータをループする必要がなくなりますが、ループを完全になくすことはできません。

于 2013-09-13T22:21:36.030 に答える