javascript - 如何从数组中输出多个结果

标签 javascript arrays

我有这个对象数组,最初只有名称单位字段。我最近添加了一个数组类型的 unitConv 字段。

我曾经输出一个字符串数组,其中包含每个对象的名称和单位。

const ingredients = [
  {name: 'wine', unit: 'ml', unitConv: []},
  {name: 'salt', unit: 'gr', unitConv: [{unitMeasure: { name: 'spoon'}}, {unitMeasure: { name: 'tea-spoon'}}]},
  {name: 'onion', unit: 'piece', unitConv: []},
]

const response = ingredients.map(ing => `${ing.name} [${ing.unit}]`)

这是响应:

["wine [ml]", "salt [gr]", "onion [piece]"]

现在我添加了 unitConv,我想查看对象中是否有可用的 unitConv,并将它们作为选项传递,如下所示:

["wine [ml]", "salt [gr]", "onion [piece]", "salt[spoon]", "salt[tea-spoon]"]

我也想保留盐的初始值,即使用'gr'作为单位的值。因此,对于盐,因为我有一个 unit 和两个 unitConv,所以我想使用每个选项将其输出三次。 如果其中一个对象没有unitConv,则unitConv字段将显示为空数组,如上面的示例所示。

最佳答案

您可以使用Array#flatMap创建第二个数组与第一个数组连接。

const ingredients = [
  {name: 'wine', unit: 'ml', unitConv: []},
  {name: 'salt', unit: 'gr', unitConv: [{unitMeasure: { name: 'spoon'}}, {unitMeasure: { name: 'tea-spoon'}}]},
  {name: 'onion', unit: 'piece', unitConv: []},
]

const response = ingredients.map(ing => `${ing.name} [${ing.unit}]`)
     .concat(ingredients.flatMap(({name, unitConv})=>
         unitConv.map(x => `${name} [${x.unitMeasure.name}]`)));
console.log(response);

关于javascript - 如何从数组中输出多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65038669/

相关文章:

Javascript 数组拼接而不改变索引

javascript - Highcharts 多线图不显示多线的工具提示

javascript - 在 JavaScript 中更新表格

javascript - 有没有办法将内联 CSS 提取到 CSS 文件中

javascript - React - 双花括号与一个大括号之间的区别枚举属性

arrays - 谷歌工作表 : How to vlookup by matching value in between max and min?

arrays - 如何计算每次遇到零时重置的累积和

java - 获取 ArrayList 元素平均值的最短形式

objective-c - 合并两个数组,同时保留原始数组顺序

javascript - Jquery 在下拉列表中禁用选项