2

おおよそ次のようなオブジェクトを返す ajax リクエストがあります。

[
 {category: "Test Category", id: "1", name: "Test",  language: "English"},
 {category: "Test Category", id: "2", name: "Test2", language: "English"},
 {category: "A test",        id: "3", name: "Test3", language: "Spanish"},
 {category: "Test Category", id: "4", name: "Test4", language: "Spanish"}
]

基本的に、次のことを行う方法が必要です。

  • 英語またはスペイン語のみで存在するすべてのカテゴリを一覧表示する
  • 指定された言語に存在するすべての ID を一覧表示する
  • 指定したカテゴリに存在するすべての ID を一覧表示する

これを行うための最善の方法は、そのデータを格納できる独自の一時配列を作成することであると確信していますが、そのデータを取得するための正しいループを作成するための Javascript に十分な自信がありません。私はPHPで$category['Test Category'][] = 3ループ中に何かをすることを知っています。

アイデアは、ユーザーが英語でフィルタリングし、次にその中のカテゴリでフィルタリングすることを選択したことに基づいて、物事をフィルタリングする機能が必要だということです。

誰かが私を正しい方向に向けることができますか?

4

5 に答える 5

2

タグにjQueryを含めたので、それを使用すると思いました:

//All categories with English or spanish language (categories is the array)
$.grep(categories, function(c) { return c.language=='English' || c.language == 'Spanish'; });
于 2012-12-20T21:51:54.850 に答える
1

元の配列であるバニラJSを使用jsonすると、次を使用できます。

function filterJson(attr, obj) {
    var attrList = [],
        match,
        tempAttr,
        i;

    for (i = 0; i < json.length; i += 1) {
        match = true;

        for (tempAttr in obj) {
            if (!obj[tempAttr].test(json[i][tempAttr])) {
                match = false;
                break;
            }
        }

        if (match) attrList.push(json[i][attr]);
    }

    return attrList;
}

そして、次のように使用します。

「英語またはスペイン語のみで存在するすべてのカテゴリを一覧表示する」

filterJson('category', {
    language: /(English|Spanish)/
});
// => ["Test Category", "Test Category", "A test", "Test Category"] 

「指定された言語に存在するすべての ID を一覧表示する」

filterJson('id', {
    language: /English/
});
// => ["1", "2"] 

「指定されたカテゴリに存在するすべての ID を一覧表示する」

filterJson('id', {
    category: /Test Category/
});  
// => ["1", "2", "4"] 
于 2012-12-20T22:09:37.527 に答える
0

データが常に真であるといういくつかの仮定を当てにすることができる場合-たとえば、category:、id:、name:、およびlanguage:のみがあり、コロンやコンマはどこにも存在しないということです。名前またはカテゴリ-次に、実際にはすべての情報を1つの文字列に貼り付け、RegExpを使用してそれを見つけることをお勧めします。

例えば:

[
 "category:Test Category, id:1, name:Test,  language:English",
 "category:Test Category, id:2, name:Test2, language:English",
 "category:A test,        id:3, name:Test3, language:Spanish",
 "category:Test Category, id:4, name:Test4, language:Spanish"
]

ここで、エントリの値を見つけるには、RegExp.match()を使用します。

var m = /^category:([^,]+)\s+id:(\d+),\s+name:([^,]+),\s+language:(.+)$/i;
// m[1] = Test Category
// m[2] = 1;
// m[3] = Test2
// m[4] = Spanish

そして、あなたはテストを使用して検索することができます。

function my_filter(criteria) {
    var results = [];
    var re = new RegExp(criteria);
    for (var i=0; i<array.length; i++) {
        if (array[i].test(re))
            results.push(array[i]);
    }
    return results;
}
var english_array = my_filter('language:english');
var atest_array = my_filter('category:a test');
于 2012-12-20T22:01:59.257 に答える