繁体   English   中英

如何根据项目数组减少数组对象

[英]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)

使用reduceincludes

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM