微信小程序提供了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;
}
得到对象的全部属性后,我们就可以遍历对象了。