Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个数组对象的匹配数据并返回新数组对象_Javascript_Arrays_Filter - Fatal编程技术网

Javascript 比较两个数组对象的匹配数据并返回新数组对象

Javascript 比较两个数组对象的匹配数据并返回新数组对象,javascript,arrays,filter,Javascript,Arrays,Filter,如何检查两个阵列中的可用数据并返回新阵列。例如,我想比较一个数组中的数据,并与另一个数组进行检查,如果它可用,那么它将返回带有count的新数组。下面是两个数组和我预期的结果代码 const restaurant = [ { name: 'La mesa', cuisine: ['chiness', 'arabic'] }, { name: 'Purnima', cuisine: ['thai'] },

如何检查两个阵列中的可用数据并返回新阵列。例如,我想比较一个数组中的数据,并与另一个数组进行检查,如果它可用,那么它将返回带有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 },
            ];


谢谢

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

const restaurant=[{name:'La mesa',菜肴:['chiness','arabic']},{name:'Purnima',菜肴:['thai']},{name:'Red Bull',菜肴:['french','arabic']},{name:'意大利面',菜肴:['indian']},
美食=[{name:'中国'},{name:'阿拉伯语'},{name:'泰国'},{name:'法语'},{name:'意大利'},{name:'印度'},{name:'墨西哥'}],
mycourine=courine.map({name}=>({name,restaurant:restaurant.reduce((r,{courine}=>r+courine.some(c=>c==name),0));
console.log(我的烹饪)

.as控制台包装{max height:100%!important;top:0;}
带有映射和过滤器,如下所示:

const myCuisine = cuisine.map(
  item => {
    return {
      ...item,
      restaurant: restaurant.filter(
        res => res.cuisine.indexOf(item.name) >= 0
      ).length
    }
  }
);

您可以映射菜系并过滤餐厅以获得餐厅数量

cuisine.map((cuisineObject) => {
  const numberOfRestaurants = restaurant.filter((restaurantObject) => restaurantObject.cuisine.includes(cuisineObject.name)).length
    return {
        ...cuisineObject,
        restaurant: numberOfRestaurants
    }
})

您可以构建一个对象,该对象存储每种菜肴的所有频率,然后在
美食
数组中使用,如下所示:

const restaurant=[{name:'La mesa',菜肴:['chiness','arabic']},{name:'Purnima',菜肴:['thai']},{name:'Red Bull',菜肴:['french','arabic']},{name:'意大利面',菜肴:['indian']};
康斯特美食=[{name:'中国'},{name:'阿拉伯语'},{name:'泰国'},{name:'法语'},{name:'意大利语'},{name:'印度'},{name:'墨西哥'},];
const cusineFreq=餐厅.减少((o,{courine})=>{
烹饪。forEach(类型=>o[type]=(o[type]| | 0)+1);
返回o;
}, {}); 
const res=courine.map(o=>({…o,餐厅:(cusineFreq[o.name]| | 0)});

控制台日志(res)map
flatMap
filter

编辑:使用
flatMap
代替
map.flat

courine.map(({name})=>({name:name,restaurant:restaurant.flatMap(v=>v.courine).filter(v=>v==name.length}))

首先,我们可以将包含烹饪信息的餐厅格式化为一个对象,然后使用同一个对象查找提供特定烹饪的餐厅数量。这可以通过使用
Array.reduce
Array.map
实现

const restaurant=[{name:'La mesa',美食:['chiness','arabic']},{name:'Purnima',美食:['thai']},{name:'Red Bull',美食:['french','arabic']},{name:'意大利面',美食:['indian']};
康斯特美食=[{name:'chiness'},{name:'arabic'},{name:'thai'},{name:'french'},{name:'意大利人'},{name:'indian'},{name:'mexican'}];
const getFormattedList=(菜系、餐厅)=>{
返回菜系。地图(菜系=>{
返回{
烹饪
餐厅:餐厅[菜肴.名称]| | 0
}
})
}
const formatRestaurantCuisines=(餐厅)=>{
返回餐厅。减少((结果,餐厅)=>{
餐厅.美食.餐厅(美食=>{
结果[烹饪]=(结果[烹饪]| | 0)+1;
})
返回结果;
}, {});
}
//格式化对象,将包含烹饪信息的餐厅转换为计数
const formattedObj=formattrestaurantguisines(餐厅);
console.log(formattedObj);
console.log(getFormattedList(烹饪、格式化对象))
。作为控制台包装器{
最大高度:100%!重要;

}
应该避免使用函数
过滤器
进行计数。应该避免使用函数
过滤器
进行计数。@Ele什么更好?你可以使用
.flatMap()
而不是
.map().flat()
@NickParsons这很有趣@RadicalEdward
reduce
是一种更好的方法,因为您避免创建一个数组,而使用函数
filter
。应该避免使用函数
filter
进行计数。请添加您尝试过的代码