Vue3js:如何准确地循环数组 5 次并有条件地检查里面的元素?

Posted

技术标签:

【中文标题】Vue3js:如何准确地循环数组 5 次并有条件地检查里面的元素?【英文标题】:Vue3js: how to loop over array exacly 5 times and conditionaly check elements inside? 【发布时间】:2021-10-13 13:10:45 【问题描述】:

请注意,我花了最后 2 小时搜索 SO 的类似主题,以找到解决方案,但失败了。这就是我现在向你寻求帮助的原因。

我正在努力实现以下目标:

我有一个记分牌,上面有一些结果,应该是这样的:

John Doe 100 分 约翰·史密斯 50 分 没有名字 没有名字 没有名字

我有一个名为scoreBoardArray 的数组。

data() 
  return 
     scoreBoardArray: [
         id: '1', name: 'John Doe', pts: 100 ,
         id: '2', name: 'John Smith', pts: 50 ,
     ],
   
,

我可以循环遍历它,但没有正确执行 5 次并在找不到记录时吐出“No Name”。

我的代码(以及我解决问题的尝试):

<ul>
   <li v-for="item in scoreBoardArray" :key="item.id">
      <span v-if="item.id"> item.name   item.pts </span>
      <span v-if="!item.id">No Name</span
   </li>
</ul>

当然,我尝试使用computed 属性和简单的for(let i=0; i&lt;6; i++) ... 循环来解决问题,但不知何故无法使其正常工作。

【问题讨论】:

【参考方案1】:

您可以对slice scoreBoardArray[] 中的前5 个元素使用计算属性,并获取所需的"No Name" 虚拟项目的数量(分别命名为topScoresdummyLength):

export default 
  computed: 
    topScores() 
      return this.scoreBoardArray
        .slice()                      // create a copy
        .sort((a,b) => b.pts - a.pts) // sort by points
        .slice(0, 5)                  // first 5
    ,
    dummyLength() 
      return Math.max(0, 5 - this.topScores.length)
    
  

并更新模板以渲染 v-for 中的计算道具,渲染 topScores 项目,然后渲染 dummyLength 虚拟项目:

<ul>
  <li v-for="item in topScores" :key="item.id">
    <span> item.name  ( item.pts )</span>
  </li>
  <li v-for="n in dummyLength">No Name</li>
</ul>

demo

【讨论】:

如果您的意思是“重复键”,则在第二个循环中无关紧要。它们都被渲染到相同的元素,所以它们真的不需要键控。【参考方案2】:

当然,这可以通过计算属性实现。

尝试在数组末尾添加一些空对象,将其填充为 5 个值。

computed: 
  scoreboard() 
    let append = []
    const appendCount = 5 - this.scoreBoardArray
    for (let i = 0; i < appendCount; i++) 
      append[i] = 
    
    return [...this.scoreBoardArray, ...append]
  

但是由于这些对象是空的,您会遇到v-for 循环键的问题。 要修复它,您可以使用索引作为键:

<li v-for="(item, index) in scoreboard" :key="index">

【讨论】:

以上是关于Vue3js:如何准确地循环数组 5 次并有条件地检查里面的元素?的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 如何有条件地跳过for循环迭代

在 Spring 3 控制器中,如何检查登录用户的权限并有条件地执行某些操作?

Spark Join 数据框并有条件地更新列

如何处理来自 websocket 流的数据并有条件地在 Azure Bot 中发送主动消息?

C语言——如何有效记忆冒泡排序法?

如何形象地解释 JavaScript 中 map,foreach,reduce 间的区别