首页 > 解决方案 > 比较两个数组对象的匹配数据并返回新的数组对象

问题描述

如何检查两个数组中的可用数据并返回新数组。例如,我想比较一个数组中的数据并检查另一个数组,如果它可用,那么它将返回带有 count 的新数组。下面是两个数组和我预期的结果代码。

        const restaurant = [
                { name: 'La mesa', cuisine: ['chiness', 'arabic'] },
                { name: 'Purnima', cuisine: ['thai'] },
                { name: 'Red Bull', cuisine: ['french', 'arabic'] },
                { name: 'Pasta', cuisine: ['indian'] },
            ];

            const cuisine = [
                { name: 'chiness' },
                { name: 'arabic' },
                { name: 'thai' },
                { name: 'french' },
                { name: 'italian' },
                { name: 'indian' },
                { name: 'mexican' },
            ];

            // Expected Output a new array like this below
            const myCuisine = [
                { name: 'chiness', restaurant: 1 },
                { name: 'arabic', restaurant: 2 },
                { name: 'thai', restaurant: 1 },
                { name: 'french', restaurant: 1 },
                { name: 'italian', restaurant: 0 },
                { name: 'indian', restaurant: 1 },
                { name: 'mexican', restaurant: 0 },
            ];

谢谢

标签: javascriptarraysfilter

解决方案


您可以使用函数mapreducesome一起构建所需的输出,如下所示:

const restaurant = [    { name: 'La mesa', cuisine: ['chiness', 'arabic'] },    { name: 'Purnima', cuisine: ['thai'] },    { name: 'Red Bull', cuisine: ['french', 'arabic'] },    { name: 'Pasta', cuisine: ['indian'] }],
      cuisine = [    { name: 'chiness' },    { name: 'arabic' },    { name: 'thai' },    { name: 'french' },    { name: 'italian' },    { name: 'indian' },    { name: 'mexican' }],
      myCuisine = cuisine.map(({name}) => ({name, restaurant: restaurant.reduce((r, {cuisine}) => r + cuisine.some(c => c === name) , 0)}));

console.log(myCuisine)
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读