![](/img/trans.png)
[英]How to reduce an array of objects inside an array of objects based on another array
[英]How to reduce an array objects based on an array of items
如何根据匹配的 id 数组将以下对象数组( packageMap
)转换为名称字符串
我想象它是过滤器和 map 的组合,但我无法理解!
const packageMap = [
{
id: `g3IbvxHPGt4xUVfYK`,
name: `Package 1 - Cost £10`
},
{
id: `HPGKCapDCJS76sgd7`,
name: `Package 2 - Cost £20`
},
{
id: `jbd73hndxJH6U6j6s`,
name: `Package 3 - Cost £1`
},
{
id: `5F53DSndxJH6nns22`,
name: `Package 3 - Cost £5`
}
];
const matchingIDs = ['5F53DSndxJH6nns22', 'HPGKCapDCJS76sgd7'];
如果我能以某种方式从packageMap
中获得一组名称,看起来像这样
let packages = ['Package 3 - Cost £5', 'Package 2 - Cost £20']
然后我可以在packages
上使用 join
let joined = packages.join(' and ')
let outStr = `You are subscribed to ${joined}`
console.log(outStr)
// "You are subscribed to Package 3 - Cost £5 and Package 2 - Cost £20"
我正在使用节点,所以不受旧浏览器或类似的东西的限制,所以最新版本的答案很好。
packageMap.filter(({ id }) => matchingIDs.includes(id)).map(({ name }) => name)
这会起作用:
const packageMap = [ { id: `g3IbvxHPGt4xUVfYK`, name: `Package 1 - Cost £10` }, { id: `HPGKCapDCJS76sgd7`, name: `Package 2 - Cost £20` }, { id: `jbd73hndxJH6U6j6s`, name: `Package 3 - Cost £1` }, { id: `5F53DSndxJH6nns22`, name: `Package 3 - Cost £5` } ]; const matchingIDs = ['5F53DSndxJH6nns22', 'HPGKCapDCJS76sgd7']; let packages = matchingIDs.map(x => packageMap.find(y => y.id == x).name) console.log(packages)
使用reduce
和includes
const packageMap = [ { id: `g3IbvxHPGt4xUVfYK`, name: `Package 1 - Cost £10`, }, { id: `HPGKCapDCJS76sgd7`, name: `Package 2 - Cost £20`, }, { id: `jbd73hndxJH6U6j6s`, name: `Package 3 - Cost £1`, }, { id: `5F53DSndxJH6nns22`, name: `Package 3 - Cost £5`, }, ]; const matchingIDs = ["5F53DSndxJH6nns22", "HPGKCapDCJS76sgd7"]; const names = packageMap.reduce( (acc, { id, name }) => (matchingIDs.includes(id)? [...acc, name]: acc), [] ); console.log(names);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.