微信小程序提供了WXS
語言,允許我們在WXML
中執(zhí)行簡單的腳本氮双,這在渲染時加工數(shù)據(jù)很有用效诅,但是WXS
沒有JS
功能強(qiáng)大胀滚,僅提供了基礎(chǔ)功能,WXS
沒有for...in
語句乱投,也不能用Object.keys
咽笼,所以想要遍歷一個plain object
,我們需要自己實現(xiàn)戚炫。
下面實現(xiàn)了一個遍歷plain object
方法剑刑。它的思路是:
- 將
plain object
序列化; - 從序列化后的字符串中匹配
plain object
的屬性:雙引號內(nèi)至少一個字符并緊跟冒號即認(rèn)為匹配到一個屬性双肤; - 考慮對象嵌套場景施掏,需要記錄
{
匹配的次數(shù)钮惠,當(dāng)匹配到一個{
,嵌套層級+1
七芭,當(dāng)匹配到一個}
素挽,嵌套層級-1
,僅當(dāng)層級為1
時抖苦,匹配到的屬性才會被記錄毁菱。 - 匹配完整個字符串后米死,返回記錄的屬性锌历。
代碼實現(xiàn):
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;
}
得到對象的全部屬性后,我們就可以遍歷對象了峦筒。