代码之家  ›  专栏  ›  技术社区  ›  Nan Da

如果满足Vue JS中的特定条件,如何对特定数组项进行编号?

  •  0
  • Nan Da  · 技术社区  · 2 年前

    假设我的vue状态中有一组对象,如下所示:

    [
     {name: "Daniel", default: false},
     {name: "Ross", default: true},
     {name: "Rachel", default: false},
     {name: "Joey", default: false}
     {name: "Monica", default: true}
     {name: "Gunther", default: true}
    ]
    

    在我的网页上,所有这些名字都已经显示在一个列表中。我想在我的网页上显示的内容如下:

    • 丹尼尔
    • 罗斯-默认值1
    • 雷切尔
    • 乔伊
    • 莫妮卡-默认2
    • Gunther-默认值3

    从上面的例子来看,我认为我想要实现的目标非常明确。在vue中实现这一点的最简单方法是什么?

    2 回复  |  直到 2 年前
        1
  •  2
  •   Amaarockz    2 年前

    尝试使用 computed 所有物检查下面的代码片段

    var app = new Vue({
      el: '#app',
      data() {
        return {
          list: [
           {name: "Daniel", default: false},
           {name: "Ross", default: true},
           {name: "Rachel", default: false},
           {name: "Joey", default: false},
           {name: "Monica", default: true},
           {name: "Gunther", default: true},
          ]
        };
      },
      computed: {
        getList() {
          let index = 1;
          return this.list.map(item => {
            return item.default ? `${item.name} - Default ${index++}` : `${item.name}`;
          });
        }
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <div id="app">
    <template>
     <ul>
      <li v-for="(item, index) in getList" :key="index">
      {{item}}
      </li>
     </ul>
    </template>
    </div>
        2
  •  0
  •   gmaziashvili    2 年前

    你可以使用数组。映射以迭代所有数组元素并生成所需结果

    const data = [
      { name: "Daniel" , default: false },
      { name: "Ross"   , default: true },
      { name: "Rachel" , default: false },
      { name: "Joey"   , default: false },
      { name: "Monica" , default: true },
      { name: "Gunther", default: true }
    ];
    
    let defaultCount = 0;
    const res = data.map(item => `${item.name}${item.default? ` default ${++defaultCount}`:''}`)
    
    console.log(res)
        3
  •  0
  •   Tanay    2 年前

    你可以试试这个:

    let defaultCount = 0;
    const data = [
      { name: "Daniel", default: false },
      { name: "Ross", default: true },
      { name: "Rachel", default: false },
      { name: "Joey", default: false },
      { name: "Monica", default: true },
      { name: "Gunther", default: true },
    ].map((el) => {
      if (el.default) {
        defaultCount++;
        return {
          ...el,
          defCount: defaultCount,
        };
      } else {
        return {
          ...el,
          defCount: null,
        };
      }
    });
    
    console.log(data);
    <li v-for="(item) in array" :key="item.name">
    {{`${item.name}${item.defCount? ` - Default ${item.defCount}`:''}`}}
    </li>