javascript - 比较两个数组对象的匹配数据并返回新的数组对象
问题描述
如何检查两个数组中的可用数据并返回新数组。例如,我想比较一个数组中的数据并检查另一个数组,如果它可用,那么它将返回带有 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', 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; }
推荐阅读
- javascript - 使用 Tildas 的目标 ID
- c++ - C++ 如何转换 std::vector
到 const std::vector ? - node.js - 使用 brew 将节点版本 10.7.0 降级到 10.6.0
- macos - 如何从 NSCollectionView 中拖动项目
- reactjs - Enzyme, Jest, React - 两个相关的输入,一个不改变状态
- android - 如何使用 kotlin 添加按钮片段、ViewPager
- c# - Swagger 文档未按预期导入 Postman
- java - 一旦任何期货失败,如何实现 CompletableFuture.allOf() 异常完成?
- .net - 检测 DotNet 应用程序关闭且没有错误的原因
- excel - 在 Excel 中,如何在两个单独的工作表中匹配两个不同的值后有条件地格式化单元格?