小程序
小游戏
企业微信
微信支付
扫描小程序码分享
- 需求的场景描述(希望解决的问题)
wxs 中不支持 for in 循环,造成两点问题:
如何遍历对象
以前的 js 代码无法复用(虽然官方不允许 js 和 wxs 互通,但还是可以通过构建工具同构)
- 希望提供的能力
支持 for in 循环遍历对象的能力
11 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
反馈收到,已经推给相关同事评估。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
弱弱的问一句:2022年春节前,能不能搞定?
2021年了还是不行
ES6以上语法不支持也就算了,for in 这么基础的遍历方法都还没支持,心情凉凉~
五年半过去了,依然不支持。。。
可以在wxs中使用polyfill,具体实现如下:
function forEachObj(obj, callback) { var json = JSON.stringify(obj) .replace(getRegExp('\n', 'g'), '') .replace(getRegExp('^\{'), '') .replace(getRegExp('\}$'), '') .trim(); if (typeof callback !== 'function' || json === '') return; var specialExp = getRegExp('\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})', 'g'); var contExp = getRegExp('"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?', 'g'); var dangerousExp = getRegExp('[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]', 'g'); dangerousExp.lastIndex = 0; var commaExp = getRegExp('\,', 'g'); var bklExp = getRegExp('\[', 'g'); var bkrExp = getRegExp('\]', 'g'); var bslExp = getRegExp('\{', 'g'); var bsrExp = getRegExp('\}', 'g'); if (dangerousExp.test(json)) { json = json.replace(dangerousExp, function(str) { return '\\u' + ('0000' + str.charCodeAt(0).toString(16)).slice(-4); }); } var specialFlags = json.match(specialExp) || []; var dedupFlags = []; for (var sp = 0; sp < specialFlags.length; sp++) { var item = specialFlags[sp]; if (dedupFlags.indexOf(item) === -1) { dedupFlags.push(item); } } dedupFlags.sort(function(a,b) { var perv = a.split('').filter(function(f) { return '\\' === f }).length; var next = b.split('').filter(function(f) { return '\\' === f }).length; return next - perv; }); var rmSize = 7; var ltSize = rmSize + dedupFlags.length; var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']; var randomList = []; for (var l = 0; l < ltSize; l++) { var flag = true; while(flag) { var strList = []; while(strList.length < 5) { var idx = Math.floor(Math.random() * letters.length); if (strList.indexOf(letters[idx]) === -1) { strList.push(letters[idx]); } } var joinStr = '@' + strList.join('') + '@'; if (randomList.indexOf(joinStr) === -1 && json.indexOf(joinStr) === -1) { randomList.push(joinStr); flag = false; } } } var replaceMap = { comma: randomList[0], bkl: randomList[1], bkr: randomList[2], bsl: randomList[3], bsr: randomList[4], contSplit: randomList[5], split: randomList[6] }; var specialRandoms = randomList.slice(rmSize, ltSize); var eqFlag = '\\'.charAt(0); for (var dpf = 0; dpf < dedupFlags.length; dpf++) { var item = dedupFlags[dpf]; var targetItem = item.split('').map(function(m) { var isSpecFlag = m.charAt(0) === eqFlag; if (isSpecFlag) { m = eqFlag + m; } return m; }).join(''); json = json.replace(getRegExp(targetItem, 'g'), specialRandoms[dpf]); } var jsonConts = json.match(contExp) || []; var jsonFlags = json.replace(contExp, replaceMap.contSplit).split(replaceMap.contSplit); var joinJson = ''; for (var j = 0; j < jsonConts.length; j++) { var item = jsonConts[j]; if (commaExp.test(item) || bklExp.test(item) || bkrExp.test(item) || bslExp.test(item) || bsrExp.test(item)) { item = item .replace(getRegExp('\,$'), '') .replace(commaExp, replaceMap.comma) .replace(bklExp, replaceMap.bkl) .replace(bkrExp, replaceMap.bkr) .replace(bslExp, replaceMap.bsl) .replace(bsrExp, replaceMap.bsr); } joinJson += (jsonFlags[0] || '') + item; jsonFlags.shift(); } json = joinJson + (jsonFlags[0] || ''); var jsonList = json.replace(getRegExp('\,', 'g'), ',' + replaceMap.split).split(replaceMap.split); var count = 0; var jsonStr = ''; for (var i = 0; i < jsonList.length; i++) { var item = jsonList[i]; if (getRegExp('\[|\{|\]|\}').test(item)) { var start = item.match(getRegExp('\[|\{', 'g')) || []; var end = item.match(getRegExp('\]|\}', 'g')) || []; var diff = start.length - end.length; count += diff; jsonStr += item; } else if (count > 0) { jsonStr += item; } else if (count === 0 && jsonStr === '') { jsonStr = item; } if (count === 0) { jsonStr = jsonStr .replace(getRegExp(replaceMap.comma, 'g'), ',') .replace(getRegExp(replaceMap.bkl, 'g'), '[') .replace(getRegExp(replaceMap.bkr, 'g'), ']') .replace(getRegExp(replaceMap.bsl, 'g'), '{') .replace(getRegExp(replaceMap.bsr, 'g'), '}'); var keyStr = (jsonStr.match(getRegExp('"[^"\\\n\r]*"')) || [])[0] || ''; var valueStr = jsonStr.replace(keyStr, '').replace(getRegExp('^:'),'').replace(getRegExp('\,$'), '') || ''; for (var sr = 0; sr < specialRandoms.length; sr++) { var item = specialRandoms[sr]; keyStr = keyStr.replace(getRegExp(item, 'g'), dedupFlags[sr]); valueStr = valueStr.replace(getRegExp(item, 'g'), dedupFlags[sr]); } var kv = JSON.parse('['+keyStr+','+valueStr+']'); callback(kv[0], kv[1]); jsonStr = ''; } } }
相关链接:
CSDN: https://blog.csdn.net/Avril_L/article/details/134882886
github:https://github.com/chenwei1012/for-each-object/tree/release-v1.0.0
gitee:https://gitee.com/chenwei1012/for-each-object/tree/master
只能使用[ [key,value],[key,value] ]形式的类型了,使用Object.entries({name:'jack'})转化。
2022年了,现在情况怎么样了
马上2022年元旦了,请问好了吗
for in不能用,用
for(var i =0; i<arr.length; i++){
}
正在加载...
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
反馈收到,已经推给相关同事评估。
弱弱的问一句:2022年春节前,能不能搞定?
2021年了还是不行
ES6以上语法不支持也就算了,for in 这么基础的遍历方法都还没支持,心情凉凉~
五年半过去了,依然不支持。。。
可以在wxs中使用polyfill,具体实现如下:
function forEachObj(obj, callback) { var json = JSON.stringify(obj) .replace(getRegExp('\n', 'g'), '') .replace(getRegExp('^\{'), '') .replace(getRegExp('\}$'), '') .trim(); if (typeof callback !== 'function' || json === '') return; var specialExp = getRegExp('\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})', 'g'); var contExp = getRegExp('"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?', 'g'); var dangerousExp = getRegExp('[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]', 'g'); dangerousExp.lastIndex = 0; var commaExp = getRegExp('\,', 'g'); var bklExp = getRegExp('\[', 'g'); var bkrExp = getRegExp('\]', 'g'); var bslExp = getRegExp('\{', 'g'); var bsrExp = getRegExp('\}', 'g'); if (dangerousExp.test(json)) { json = json.replace(dangerousExp, function(str) { return '\\u' + ('0000' + str.charCodeAt(0).toString(16)).slice(-4); }); } var specialFlags = json.match(specialExp) || []; var dedupFlags = []; for (var sp = 0; sp < specialFlags.length; sp++) { var item = specialFlags[sp]; if (dedupFlags.indexOf(item) === -1) { dedupFlags.push(item); } } dedupFlags.sort(function(a,b) { var perv = a.split('').filter(function(f) { return '\\' === f }).length; var next = b.split('').filter(function(f) { return '\\' === f }).length; return next - perv; }); var rmSize = 7; var ltSize = rmSize + dedupFlags.length; var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']; var randomList = []; for (var l = 0; l < ltSize; l++) { var flag = true; while(flag) { var strList = []; while(strList.length < 5) { var idx = Math.floor(Math.random() * letters.length); if (strList.indexOf(letters[idx]) === -1) { strList.push(letters[idx]); } } var joinStr = '@' + strList.join('') + '@'; if (randomList.indexOf(joinStr) === -1 && json.indexOf(joinStr) === -1) { randomList.push(joinStr); flag = false; } } } var replaceMap = { comma: randomList[0], bkl: randomList[1], bkr: randomList[2], bsl: randomList[3], bsr: randomList[4], contSplit: randomList[5], split: randomList[6] }; var specialRandoms = randomList.slice(rmSize, ltSize); var eqFlag = '\\'.charAt(0); for (var dpf = 0; dpf < dedupFlags.length; dpf++) { var item = dedupFlags[dpf]; var targetItem = item.split('').map(function(m) { var isSpecFlag = m.charAt(0) === eqFlag; if (isSpecFlag) { m = eqFlag + m; } return m; }).join(''); json = json.replace(getRegExp(targetItem, 'g'), specialRandoms[dpf]); } var jsonConts = json.match(contExp) || []; var jsonFlags = json.replace(contExp, replaceMap.contSplit).split(replaceMap.contSplit); var joinJson = ''; for (var j = 0; j < jsonConts.length; j++) { var item = jsonConts[j]; if (commaExp.test(item) || bklExp.test(item) || bkrExp.test(item) || bslExp.test(item) || bsrExp.test(item)) { item = item .replace(getRegExp('\,$'), '') .replace(commaExp, replaceMap.comma) .replace(bklExp, replaceMap.bkl) .replace(bkrExp, replaceMap.bkr) .replace(bslExp, replaceMap.bsl) .replace(bsrExp, replaceMap.bsr); } joinJson += (jsonFlags[0] || '') + item; jsonFlags.shift(); } json = joinJson + (jsonFlags[0] || ''); var jsonList = json.replace(getRegExp('\,', 'g'), ',' + replaceMap.split).split(replaceMap.split); var count = 0; var jsonStr = ''; for (var i = 0; i < jsonList.length; i++) { var item = jsonList[i]; if (getRegExp('\[|\{|\]|\}').test(item)) { var start = item.match(getRegExp('\[|\{', 'g')) || []; var end = item.match(getRegExp('\]|\}', 'g')) || []; var diff = start.length - end.length; count += diff; jsonStr += item; } else if (count > 0) { jsonStr += item; } else if (count === 0 && jsonStr === '') { jsonStr = item; } if (count === 0) { jsonStr = jsonStr .replace(getRegExp(replaceMap.comma, 'g'), ',') .replace(getRegExp(replaceMap.bkl, 'g'), '[') .replace(getRegExp(replaceMap.bkr, 'g'), ']') .replace(getRegExp(replaceMap.bsl, 'g'), '{') .replace(getRegExp(replaceMap.bsr, 'g'), '}'); var keyStr = (jsonStr.match(getRegExp('"[^"\\\n\r]*"')) || [])[0] || ''; var valueStr = jsonStr.replace(keyStr, '').replace(getRegExp('^:'),'').replace(getRegExp('\,$'), '') || ''; for (var sr = 0; sr < specialRandoms.length; sr++) { var item = specialRandoms[sr]; keyStr = keyStr.replace(getRegExp(item, 'g'), dedupFlags[sr]); valueStr = valueStr.replace(getRegExp(item, 'g'), dedupFlags[sr]); } var kv = JSON.parse('['+keyStr+','+valueStr+']'); callback(kv[0], kv[1]); jsonStr = ''; } } }
相关链接:
CSDN: https://blog.csdn.net/Avril_L/article/details/134882886
github:https://github.com/chenwei1012/for-each-object/tree/release-v1.0.0
gitee:https://gitee.com/chenwei1012/for-each-object/tree/master
只能使用[ [key,value],[key,value] ]形式的类型了,使用Object.entries({name:'jack'})转化。
2022年了,现在情况怎么样了
马上2022年元旦了,请问好了吗
for in不能用,用
for(var i =0; i<arr.length; i++){
}