【问题标题】:Vue.js: v-for iteration with two variablesVue.js:具有两个变量的 v-for 迭代
【发布时间】:2018-07-09 07:06:17
【问题描述】:

是否可以编写带有两个变量的 v-for 迭代?

我尝试了类似的方法,但它不起作用

<ul id="example-1">
  <li v-for="apple in apples" v-for="banana in bananas">
    {{ apple .message }}
    {{ banana .message }}
  </li>
</ul>

感谢任何帮助!

【问题讨论】:

  • 在迭代之前,将数组元素压入单个数组,然后进行迭代。它简单易行
  • 如果数组长度不同会怎样?
  • 如果你用lodash可以看_.zip

标签: javascript vue.js


【解决方案1】:

我将创建一个计算属性,将两个数组组合成一个对象数组。

这样,您还可以适应不同的长度。例如

computed: {
  fruit() {
    const fruit = []
    for (let i = 0, len = Math.max(this.apples.length, this.bananas.length); i < len; i++) {
      fruit.push({
        appleMessage: this.apples[i] && this.apples[i].message || 'no apple message',
        bananaMessage: this.bananas[i] && this.bananas[i].message || 'no banana message'
      })
    }
    return fruit
  }
}

然后你可以迭代

<li v-for="f in fruit">
  {{ f.appleMessage }}
  {{ f.bananaMessage }}
</li>

演示~http://jsfiddle.net/wzmL1y6q/

【讨论】:

    【解决方案2】:

    类似的东西呢?

    <ul id="example-1">
      <li v-for="(apple, index) in apples">
        {{ apple.message }}
        {{ banana[index].message }}
      </li>
    </ul>
    

    但您必须确保列表具有相同的长度。

    【讨论】:

    • 不要投反对票,而是解释为什么我的回答不好,这是一种更有帮助的方式:)
    • 我投了赞成票。就可能可行的简单解决方案而言,这是一个很好的选择。我想你可能会因为脆弱性而获得一些反对意见(例如数组的长度不同)。
    • 或者,您可以使用v-for="(fruit, index) in apples.concat(banana)"
    • @Phil 考虑到问题的结构和上下文,它会工作得很好。
    • @Derek 不,OP 希望在同一索引处显示来自 applesbananas 的条目。使用concat 只会创建一个更长的数组,例如[apple1, apple2, banana1]
    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2018-08-07
    • 2018-12-20
    • 2016-03-15
    • 1970-01-01
    • 2020-07-18
    • 2010-11-17
    • 1970-01-01
    相关资源
    最近更新 更多