如何根据匹配ID的数组将以下对象数组(packageMap
)转换为名称字符串
我以为它是过滤器和地图的组合,但我听不懂!
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"
我使用的是node,因此不受旧浏览器或类似内容的限制,因此最新版本的答案很好。
答案 0 :(得分:4)
packageMap.filter(({ id }) => matchingIDs.includes(id)).map(({ name }) => name)
答案 1 :(得分:2)
这将起作用:
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)
答案 2 :(得分:1)
使用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);