Javascript 比较两个数组对象的匹配数据并返回新数组对象
如何检查两个阵列中的可用数据并返回新阵列。例如,我想比较一个数组中的数据,并与另一个数组进行检查,如果它可用,那么它将返回带有count的新数组。下面是两个数组和我预期的结果代码Javascript 比较两个数组对象的匹配数据并返回新数组对象,javascript,arrays,filter,Javascript,Arrays,Filter,如何检查两个阵列中的可用数据并返回新阵列。例如,我想比较一个数组中的数据,并与另一个数组进行检查,如果它可用,那么它将返回带有count的新数组。下面是两个数组和我预期的结果代码 const restaurant = [ { name: 'La mesa', cuisine: ['chiness', 'arabic'] }, { name: 'Purnima', cuisine: ['thai'] },
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这很有趣@RadicalEdwardreduce
是一种更好的方法,因为您避免创建一个数组,而使用函数filter
。应该避免使用函数filter
进行计数。请添加您尝试过的代码