0

同様の問題を見てきましたが、私がやろうとしていることと正確に一致するものはありません。ユーザーが質問に回答し、回答が現在次のような配列に保存されている製品「ウィザード」を構築しています。

userAnswers = ['abc',xyz',gtd'];

照合しようとしている XML は次のようになります。(注: これを json に変更するか、より効率的な方法があれば形式を変更できます)

  <row>
    <answer1>abc</answer1>
    <answer2>xyz</answer2>
    <answer3>mta</answer3>
    <product numbers>productID, productID2, productID3</product numbers>
  </row>

<row>
        <answer1>abc</answer1>
        <answer2>xyz</answer2>
        <answer3>gtd</answer3>
        <product numbers>productID, productID2, productID3</product numbers>
</row>

上記の配列に基づいて、2 行目に一致する必要があります。その時点で、製品番号ノードの内容にアクセスしたいと考えています。データセットは巨大ではありませんが (最大 5 つの質問)、可能性の数はそこまで大きくなる可能性があります。これも、iPad のメモリ制約内で機能する必要があります。それが役立つ場合は、jquery mobile をフレームワークとして使用しています。

よろしくお願いします!

4

1 に答える 1

0

フォーマットを好きなように変更できると言ったのに、なぜ 2 つの異なるフォーマット (xml、json) なのですか?

もし私があなたなら、次のようにします。

まず、次のように xml を単純な json に変換します。

var answers = [
    {
        answers: ['abc', 'xyz', 'mta'],
        products: [1, 2, 3]
    },
    {
        answers: ['abc', 'xyz', 'gtd'],
        products: [4, 5, 6]        
    }
];

それで:

var match = function(array1, array2){
    if (array1.length != array2.length)
        return false;

    for (var i = 0; i < array1.length; i++){
        if (array1[i] !== array2[i]){
             return false;   
        }
    }
    return true;
};

for (var i = 0; i < answers.length; i++){

    if (match(answers[i].answers, userAnswers)){
       console.log(answers[i].products);   
    }
}

デモ: http://jsfiddle.net/wwLuM/

詳細が必要な場合、または変更が必要な場合はお知らせください。お役に立てれば

于 2013-04-22T15:11:49.430 に答える