0

私はこのような配列を取りたい:

var food = [
    {
        name: 'strawberry',
        type: 'fruit',
        color: 'red',
        id: 3483
    },
    {
        name: 'apple',
        type: 'fruit',
        color: 'red',
        id: 3418
    },
    {
        name: 'banana',
        type: 'fruit',
        color: 'yellow',
        id: 3458
    },
    {
        name: 'brocolli',
        type: 'vegetable',
        color: 'green',
        id: 1458
    },
    {
        name: 'steak',
        type: 'meat',
        color: 'brown',
        id: 2458
    },
]

そして、私はこのようなものを動的に作成したいと思います:

var foodCategories = [
    {
        name: 'fruit',
        items: [
            {
                name: 'apple',
                type: 'fruit',
                color: 'red',
                id: 3418
            },
            {
                name: 'banana',
                type: 'fruit',
                color: 'yellow',
                id: 3458
            }
        ]
    },
    {
        name: 'vegetable',
        items: [
            {
                name: 'brocolli',
                type: 'vegetable',
                color: 'green',
                id: 1458
            },
        ]
    },
    {
        name: 'meat',
        items: [
            {
                name: 'steak',
                type: 'meat',
                color: 'brown',
                id: 2458
            }
        ]
    }
]

これを行うための最良の方法は何ですか?

4

1 に答える 1

1

あなたはこのようにそれを行うことができます。食品配列を反復処理し、見つかったオブジェクトごとに、foodCategories配列を調べて、その食品タイプのオブジェクトがあるかどうかを確認します。そうでない場合は、1つ追加します。次に、食品を適切なカテゴリオブジェクトの配列に追加します。

var foodCategories = [];

function findTypeInArray(arr, type) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].name === type) {
            return(i);
        }
    }
    return(-1);
}

for (var i = 0; i < food.length; i++) {
    var item = food[i];
    var index = findTypeInArray(foodCategories, item.type);
    if (index === -1) {
        foodCategories.push({name: item.type, items: []});
        index = foodCategories.length - 1;
    }
    foodCategories[index].items.push(item);
}

作業デモ: http: //jsfiddle.net/jfriend00/CwEE7/

于 2012-09-14T15:18:59.923 に答える