Javascript 是否基于另一个数组创建对象数组?

Javascript 是否基于另一个数组创建对象数组?,javascript,Javascript,我想要这样的数组: var food = [ { name: 'strawberry', type: 'fruit', color: 'red', id: 3483 }, { name: 'apple', type: 'fruit', color: 'red', id: 3418 }, { name: 'banan

我想要这样的数组:

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
            }
        ]
    }
]

做这件事最好的方法是什么?

你可以这样做。遍历食物数组,对于找到的每个对象,查找foodCategories数组,查看是否有该食物类型的对象。如果没有,则添加一个。然后,将食物项添加到右侧类别对象的数组中

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);
}
var foodCategories=[];
函数findTypeInArray(arr,类型){
对于(变量i=0;i

工作演示:

哇。。。是的,我知道好的。。这并不难。。。我可以告诉你,你没有读这个问题。看看这两个数据集。。。对你来说,它看起来像是一个直接映射吗?这不仅仅是一些随机的简单循环。。。我将获取一个对象数组,并根据它们的一个属性创建一个对象,将它们全部放入其中(添加一个名称键/对)。如果你费心看,我给出了所有的信息,如果你看下面给出的答案,我不认为这是一个完全直截了当的答案,值得“自己尝试”的罗嗦。如果你像它的意思一样使用StackOverflow并回答我的问题,那么你就不必假设我在做什么。。。问一个意味深长的问题,而不是问一些具体的问题,比如我最近的问题,得到的答案并不能完全解决问题。我不得不删除我的评论,因为这个网站的主持人做了一些非常奇怪的选择性编辑,留下了一段不再有意义的对话。哦,顺便说一句。。。。你贴的那封信?输出错误。。。您可能需要检查;)