收藏
回答

wx:for循环对象的时候,如何获取循环次数?

循环数组的时候可以直接用wx:for-index的值,毕竟是数组下标。

但是如果循环的是对象的话获取的就是属性名而不是循环次数了,这时应该怎么办?

Vue里可以直接v-for="(val,key,index) in obj"里获取index,微信里有没有办法获取?

回答关注问题邀请回答
收藏

4 个回答

  • 拾忆
    拾忆
    2021-11-16
    var obj = {  
    key1:1,  
    key2:2,  
    key3:3  
    };  
    Object.keys(obj).length
    
    自己用JS处理不行吗?
    
    2021-11-16
    有用 3
    回复 2
    • 瑞神Collection
      瑞神Collection
      2021-11-17
      也许我问题写的有歧义,我想要的不是总循环次数,而是动态获取当前循环的次数,也就是for循环里的 i。我要在不同的循环数下进行不同的显示操作,比如奇数时内容加个“奇数”,偶数时加入“偶数”
      2021-11-17
      回复
    • 拾忆
      拾忆
      2021-11-17回复瑞神Collection
      自己在JS里把需要的内容处理好,弄成一个数组,然后直接页面根据数组中不同的内容进行判断显示就行了。
      2021-11-17
      回复
  • 臭臭
    臭臭
    2021-11-16

    循环对象数组吗?用index也没有问题呀

    2021-11-16
    有用 1
    回复 2
    • 瑞神Collection
      瑞神Collection
      2021-11-17
      我循环的不是对象数组,是对象本身
      2021-11-17
      回复
    • 曹孟良
      曹孟良
      2021-11-18回复瑞神Collection
      你看我的回答啊哥,我给你写的就是用wxs来循环对象。。。我写了你就不看嘛
      2021-11-18
      回复
  • 曹孟良
    曹孟良
    2021-11-16

    实测有用,

    首先是wxml代码,m1.getIndex(index,arr),这里,分别传入index(固定写死index)还有循环的那个对象arr。

    <view>
      <block wx:for="{{arr}}">
        <view >{{item.text}}{{m1.getIndex(index,arr)}}</view>
      </block>
    </view>
    
    


    下面是wxs代码,直接写在同一个wxml页面就行

    <wxs module="m1">
      var getIndex = function(key,obj{
        var keyslist = objectKeys(obj)
        var index = keyslist.indexOf(key)
        return index;
      }
      function objectKeys(obj{
        var str = JSON.stringify(obj);
        var reg = getRegExp('"(\w+)":|[{}]'"g");
        var keys = [];
        var nested = 0;
        var result = null;
        while((result = reg.exec(str)) !== null) {
          var match = result[0]
          switch(match) {
            case "{":
              nested++;
              break;
            case "}":
              nested--;
              break;
            default:
              if (nested === 1) keys.push(result[1]);
              break;
          }
        }
        return keys;
      }
      module.exports.getIndex = getIndex;
    </wxs>
    
    
    
    2021-11-16
    有用 1
    回复 2
    • 曹孟良
      曹孟良
      2021-11-16
      这样写贼垃圾,如果你懒得在js里自己处理,就用我这种垃圾写法吧,还是管用的
      2021-11-16
      回复
    • 曹孟良
      曹孟良
      2021-11-16
      哪里看不懂再问我
      2021-11-16
      回复
  • 神经蛙
    神经蛙
    2022-03-15
    //循环里加是if 判断,可以解决:
     wx:for-index="i" wx:if="{{i<3}}" 
    
    2022-03-15
    有用
    回复
登录 后发表内容