首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用v-for处理嵌套数组

如何使用v-for处理嵌套数组
EN

Stack Overflow用户
提问于 2019-09-12 05:58:06
回答 2查看 33关注 0票数 0

假设我有一个需要填充项目的下拉列表,但它们是基于之前选择的下拉列表动态生成的……所以..。like...using交通工具的例子...假设我有这样的车辆数据..vehicleDetails.json

代码语言:javascript
复制
{
    "1": {
        "id": 1,
        "make": "Subaru",
    "models": [{
            "id": 1,
            "name": "Forrester",
            "years": [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
            "series": [{
                    "id": 1,
                    "name": "SH",
                    "years": [2009, 2010, 2011, 2012]
                },
                {
                    "id": 2,
                    "name": "SJ",
                    "years": [2012, 2013, 2014, 2015, 2016, 2017, 2018]
                },
                {
                    "id": 3,
                    "name": "SK",
                    "years": [2018, 2019, 2020]
                }
            ]
        },
        {
            "id": 2,
            "name": "Impreza",
            "years": [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
            "series": [{
                    "id": 1,
                    "name": "GJ",
                    "years": [2011, 2012, 2013, 2014, 2015, 2016]
                },
                {
                    "id": 2,
                    "name": "GT",
                    "years": [2017, 2018, 2019, 2020]
                }
            ]
        }
    ]
},
"2": {
    "id": 1,
    "make": "Toyota",
    "models": [{
            "id": 1,
            "name": "Camry",
            "years": [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
            "series": [{
                    "id": 1,
                    "name": "XV40",
                    "years": [2009, 2010, 2011, 2012]
                },
                {
                    "id": 2,
                    "name": "XV70",
                    "years": [2017, 2018, 2019, 2020]
                }
            ]
        },
        {
            "id": 2,
            "name": "4Runner",
            "years": [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
            "series": [{
                    "id": 1,
                    "name": "N210",
                    "years": [2009]
                },
                {
                    "id": 2,
                    "name": "GT",
                    "years": [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
                }
            ]
        }
    ]
}

}

我有三个内联下拉菜单,分别显示了品牌、型号和系列。我需要它只显示与制造相关的模型,以及与模型相关的系列。但这些都是嵌套数组,并且v-for一次只能处理一个数组。他们的身份看起来并不相关...就像..。4runner的id与Imprezza相同。在这里苦苦挣扎。帮助?

EN

回答 2

Stack Overflow用户

发布于 2019-09-12 06:08:38

您需要多个div和多个v-for来处理多个级别的数组。

或者,您可以使用一个缩减程序:https://www.robinwieruch.de/javascript-reducer/

或者一个过滤器:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

为了提取出适当的“序列”键,你只需迭代单级数组即可。

使用vueJs中的方法将是格式化数据的理想方式,因此您的模板更加优雅。

票数 0
EN

Stack Overflow用户

发布于 2019-09-12 07:47:15

下面是一个使用数据作为carData的工作组件

代码语言:javascript
复制
<template>
  <div>
    <select v-model="make">
      <option v-for="m in makes" :key="m.id" :value="m">{{ m.make }}</option>
    </select>
    <select v-model="model">
      <option v-for="m in models" :key="m.id" :value="m">{{ m.name }}</option>
    </select>
    <select v-model="year">
      <option v-for="y in years" :key="y" :value="y">{{ y }}</option>
    </select>
  </div>
</template>

<script>
const CAR_DATA = {
  '1': {
    id: 1,
    make: 'Subaru',
    models: [
      {
        id: 1,
        name: 'Forrester',
        years: [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
        series: [
          {
            id: 1,
            name: 'SH',
            years: [2009, 2010, 2011, 2012],
          },
          {
            id: 2,
            name: 'SJ',
            years: [2012, 2013, 2014, 2015, 2016, 2017, 2018],
          },
          {
            id: 3,
            name: 'SK',
            years: [2018, 2019, 2020],
          },
        ],
      },
      {
        id: 2,
        name: 'Impreza',
        years: [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
        series: [
          {
            id: 1,
            name: 'GJ',
            years: [2011, 2012, 2013, 2014, 2015, 2016],
          },
          {
            id: 2,
            name: 'GT',
            years: [2017, 2018, 2019, 2020],
          },
        ],
      },
    ],
  },
  '2': {
    id: 2,
    make: 'Toyota',
    models: [
      {
        id: 1,
        name: 'Camry',
        years: [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
        series: [
          {
            id: 1,
            name: 'XV40',
            years: [2009, 2010, 2011, 2012],
          },
          {
            id: 2,
            name: 'XV70',
            years: [2017, 2018, 2019, 2020],
          },
        ],
      },
      {
        id: 2,
        name: '4Runner',
        years: [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
        series: [
          {
            id: 1,
            name: 'N210',
            years: [2009],
          },
          {
            id: 2,
            name: 'GT',
            years: [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
          },
        ],
      },
    ],
  },
};

export default {
  data() {
    return {
      make: null,
      model: null,
      year: null,
      carData: CAR_DATA,
    };
  },
  computed: {
    makes() {
      return Object.values(this.carData);
    },
    models() {
      return this.make ? this.make.models : [];
    },
    years() {
      return this.model ? this.model.years : [];
    },
  },
};
</script>

这个实现的好处是,您实际上不必遍历对象。诀窍完全在于为每个option选择正确的value对象。

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

https://stackoverflow.com/questions/57897323

复制
相关文章

相似问题

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