【问题标题】:Display nested arrays in vue在 vue 中显示嵌套数组
【发布时间】:2020-11-06 18:36:24
【问题描述】:

我对 vue 很陌生,可以解决这个问题。

我收到了一些这样的 JSON:

[
  {
    "name": "jack",
    "age": "twenty",
    "Colors": {
      "favorite": "blue",
      "hate": "orange",
      "surprise": "violet"
    },
   
    "Food": {
     "favorite": "barbecue",
      "hate": "broccoli",
      "surprise": "pasta"
      "new": [
        "pizza",
        "ice cream"
      ]
    }
  }
]

我正在努力做到这一点:

姓名:杰克

年龄:二十岁

颜色

  • 最喜欢的:蓝色
  • 讨厌:橙色
  • 惊喜:紫罗兰色

食物

  • 最喜欢的:烧烤
  • 讨厌:西兰花
  • 惊喜:意大利面
    • 披萨
    • 冰淇淋

HTML

<p><strong>Name:</strong> Jack</p>
<p><strong>Age:</strong> Twenty</p>
<p><strong>Colors</strong>
   <ul>
      <li><strong>Favorite:<strong> Blue</li>
      <li><strong>Hate:<strong> Orange</li>
      <li><strong>Surprise:<strong> Violet</li>
   </ul>
</p>
<p><strong>Food</strong>
   <ul>
      <li><strong>Favorite:<strong> Barbecue</li>
      <li><strong>Hate:<strong> Broccoli</li>
      <li><strong>Surprise:<strong> Pasta</li>
      <li><strong>New:<strong>
         <ul>
            <li>Pizza</li>
            <li>Ice cream</li>
        </ul>
     </li>
   </ul>
</p>

所以我这样做了:

HTML

  <div v-for="(item, index) in items" :key="index">
       <div>
          <p><strong>{{title}}</strong> {{item}}</p>
          <p v-for="(category, index) in item" :key="index"><strong>{{index}}</strong> {{category}}</p>
       </div>
    </div>

脚本

import axios from 'axios'
    export default {
        name: 'theComponent',
        props: {},
        data() {
            return {
                items: []
            }
        },
        mounted() {
            const url = 'https://api-json-url'
            axios.get(url)
                .then(response => {
                    this.items= response.data[0]
                })
        }
    };

但我明白了:

姓名:杰克

0:J

1:a

2:c

3:k

年龄:二十岁

0:T

1:w

2:e

3:n

1:t

2:y

颜色:{"favorite": "blue","hate": "orange","surprise": "violet"}

  • 最喜欢的:蓝色
  • 讨厌:橙色
  • 惊喜:紫罗兰色

食物 {"favorite": "barbecue","hate": "broccoli","surprise": "pasta","new":["pizza","ice cream"] }

  • 最喜欢的:烧烤
  • 讨厌:西兰花
  • 惊喜:意大利面
  • :["pizza","ice cream"]

HTML


    <p><strong>Name:</strong> Jack</p>
    <p><strong>0</strong>J</p>
    <p><strong>1</strong>a</p>
    <p><strong>2</strong>c</p>
    <p><strong>3</strong>k</p>
    <p><strong>Age:</strong> Twenty</p>
    <p><strong>0</strong>T</p>
    <p><strong>1</strong>w</p>
    <p><strong>2</strong>e</p>
    <p><strong>3</strong>n</p>
    <p><strong>1</strong>t</p>
    <p><strong>2</strong>y</p>
    <p><strong>Colors</strong> {"favorite": "blue","hate": "orange","surprise": "violet"}</p>
    <p>
       <ul>
          <li><strong>Favorite:<strong> Blue</li>
          <li><strong>Hate:<strong> Orange</li>
          <li><strong>Surprise:<strong> Violet</li>
       </ul>
    </p>
    <p><strong>Food</strong> {"favorite": "barbecue","hate": "broccoli","surprise": "pasta","new":["pizza","ice cream"]}</p>
    <p>
       <ul>
          <li><strong>Favorite:<strong> Barbecue</li>
          <li><strong>Hate:<strong> Broccoli</li>
          <li><strong>Surprise:<strong> Pasta</li>
          <li><strong>New:<strong>["pizza","ice cream"]</li>
       </ul>
    </p>

我认为我需要像 isArray() 这样的东西,在第一个 v-for 之前带有一些 v-if。但我无法到达那里。我也尝试过长度,但没有。

【问题讨论】:

  • 需要在模板中直接访问item.nameitem.category等。如果您不知道键名,则需要使用例如Object.keys 获取要遍历的密钥。你想递归地遍历每个元素吗?然后,您需要检查该值是对象、数组还是原始值/字符串。

标签: javascript vue.js vue-component


【解决方案1】:

我已经根据你在 jsFiddle 上的示例做了一个粗略的版本:Click here

所以基本上你需要遍历项目并检查值是数组还是对象,然后你必须再次遍历它们:

<div id="app">
  <div v-for="(item, index) in Object.entries(items[0])" :key="index">
    <div v-if="typeof item[1] !='object'">
      <p>
        <strong>{{item[0]}}:</strong> {{item[1]}}
      </p>
    </div>
    <div v-else>
      <p>
        <strong>{{item[0]}}:</strong>
        <ul>
          <li v-for="(innerItem, innerIndex) in  Object.entries(item[1]) ">
            <div v-if="!Array.isArray(innerItem[1])">
              <p>


                <strong>{{innerItem[0]}}:</strong>
                <span>{{innerItem[1]}}</span>
              </p>


            </div>
            <div v-else>
              <strong>{{innerItem[0]}}:</strong>

              <ul>
                <li v-for="(it2,in2) in innerItem[1]">{{it2}}</li>
              </ul>
            </div>
          </li>
        </ul>
      </p>
    </div>
  </div>


</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2021-10-08
    • 2015-07-12
    相关资源
    最近更新 更多