在WXS中遍历对象

微信小程序提供了WXS语言,允许我们在WXML中执行简单的脚本,这在渲染时加工数据很有用,但是WXS没有JS功能强大,仅提供了基础功能,WXS没有for...in语句,也不能用Object.keys,所以想要遍历一个plain object,我们需要自己实现。
下面实现了一个遍历plain object方法。它的思路是:

  • plain object序列化;
  • 从序列化后的字符串中匹配plain object的属性:双引号内至少一个字符并紧跟冒号即认为匹配到一个属性;
  • 考虑对象嵌套场景,需要记录{匹配的次数,当匹配到一个{,嵌套层级+1,当匹配到一个},嵌套层级-1,仅当层级为1时,匹配到的属性才会被记录。
  • 匹配完整个字符串后,返回记录的属性。

代码实现:

 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;
  }

得到对象的全部属性后,我们就可以遍历对象了。

你可能感兴趣的:(在WXS中遍历对象)