从具有嵌套对象的数组创建数组

时间:2019-11-02 20:42:36

标签: javascript arrays

我有一个链接到包含嵌套对象的文章的标签数组:

[ {id: 1, name: {"en": "Tag 1" }}, {id: 2, name: {"en": "Tag 2" }}, {id: 3, name: {"en": "Tag 3" }} ]

我想创建一个新数组,简单地显示标记名称是单个数组:

[Tag 1, Tag 2, Tag 3]

我创建了以下方法:

var tagNames = [];
  this.article.tags.forEach(value => {
    tagNames.push(Object.values(value["name"]));
  });
console.log(tagNames);

但是,这会创建一个数组数组:

[[Tag 1],[Tag 2],[Tag 3]]

如何获得所需的单个阵列?

3 个答案:

答案 0 :(得分:0)

您可以替换:

tagNames.push(Object.values(value["name"]));

通过

tagNames = [...tagNames,...Object.values(value["name"])];

答案 1 :(得分:0)

您可以使用map()来做到这一点。

let data = [ {id: 1, name: {"en": "Tag 1" }}, {id: 2, name: {"en": "Tag 2" }}, {id: 3, name: {"en": "Tag 3" }} ];

let tags = data.map(item => item.name.en);

console.log(tags);

Object.values()创建一个值数组。因此,您可以在代码中使用flat()将结果转换为所需的格式。

let data = [ {id: 1, name: {"en": "Tag 1" }}, {id: 2, name: {"en": "Tag 2" }}, {id: 3, name: {"en": "Tag 3" }} ];

var tagNames = [];

data.forEach(value => {
  tagNames.push(Object.values(value["name"]));
});

console.log(tagNames.flat());

答案 2 :(得分:0)

您可以解构对象并仅将en用于映射。

var data = [{ id: 1, name: { en: "Tag 1" } }, { id: 2, name: { en: "Tag 2" } }, { id: 3, name: { en: "Tag 3" } }],
    result = data.map(({ name: { en } }) => en);

console.log(result);