首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有重复的情况下收集Vue.js中的嵌套数据?

如何在没有重复的情况下收集Vue.js中的嵌套数据?
EN

Stack Overflow用户
提问于 2019-12-18 17:15:12
回答 1查看 38关注 0票数 0

关于我的项目“阿凡达数据库”的第二个问题。我想收集所有的标签从所有的化身到一个数组。当然,列表不应该包含重复的内容。

例如,我有三个带有"red“标签的化身,在数组"allTags”- "red“中只显示一次。

数据结构

代码语言:javascript
复制
data() {
  return {
    avatars: [
      {
        name: "Butterfly Blue",
        tags: ["animal", "butterfly", "blue"]
      },
      {
        name: "Butterfly Green",
        tags: ["animal", "butterfly", "green"]
      },
      {
        name: "Deer Shining",
        tags: ["animal", "deer"]
      }
    ]
  }
}

我试图使用computed属性获取这些标记:

代码语言:javascript
复制
allTags() {
  var result = [];
  for (var avatar in this.avatars) {
    for (var tag in avatar.tags) {
      if (!tag in result) {
        result += tag
      }
    }
  }
  return result
}

但是.我唯一能看到的输出是:[] -一个空数组。

我希望computed属性allTags返回来自所有avatar的所有标记的数组([])。

使用上面的{{ allTags }}示例数据应该是:

代码语言:javascript
复制
[ "animal", "butterfly", "blue", "green", "deer" ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-18 17:19:07

你应该用!result.includes(tag)代替!tag in result,用result.push(tag)代替result += tag

代码语言:javascript
复制
allTags() {
  var result = [];
  for (let avatar of this.avatars) {
    for (let tag of avatar.tags) {
      if (!result.includes(tag)) {
        result.push(tag)
      }
    }
  }
  return result
}

另外,我已经将for..in的用法替换为for..of,这是推荐的构造。

见演示:

代码语言:javascript
复制
new Vue({
  el: '#app',
  data() {
    return {
      avatars: [{
          name: "Butterfly Blue",
          tags: ["animal", "butterfly", "blue"]
        },
        {
          name: "Butterfly Green",
          tags: ["animal", "butterfly", "green"]
        },
        {
          name: "Deer Shining",
          tags: ["animal", "deer"]
        }
      ]
    }
  },
  computed: {
    allTags() {
      var result = [];
      for (let avatar of this.avatars) {
        for (let tag of avatar.tags) {
          if (!result.includes(tag)) {
            result.push(tag)
          }
        }
      }
      return result
    }
  }
})
代码语言:javascript
复制
<script src="https://unpkg.com/vue@2.6.11/dist/vue.min.js"></script>

<div id="app">
  <h4>Avatars:</h4>
  <p>{{ avatars }}</p>
  
  <hr>
  <h4>allTags:</h4>
  <p>{{ allTags }}</p>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59397106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档