【练习】实现一个parse方法(需要实现的效果见内容),方法总结
生活随笔
收集整理的這篇文章主要介紹了
【练习】实现一个parse方法(需要实现的效果见内容),方法总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【本題來自牛客網,解題方法也借鑒于牛客網上討論區中的多種答案,在此做一個總結】
parse方法需要實現的效果如下:
var object = {b: { c: 4 }, d: [{ e: 5 }, { e: 6 }] }; console.log( parse(object, ‘b.c’) == 4 ) //true console.log( parse(object, ‘d[0].e’) == 5 ) //true console.log( parse(object, ‘d.0.e’) == 5 ) //true console.log( parse(object, ‘d[1].e’) == 6 ) //true console.log( parse(object, ‘d.1.e’) == 6 ) //true console.log( parse(object, ‘f’) == ‘undefined’ ) //true先來理解一下這個方法需要實現什么功能,簡單來說就是傳入兩個參數,第一個參數為待訪問的一個對象,第二個參數為一個字符串,字符串中是調用對象中的值的語句,parse()方法需要根據字符串中的語句訪問object對象,并返回訪問的結果。
那么,怎么實現這個方法呢。
可以看到題中傳入的字符串中的語句,有點表示法和方括號表示法,將字符串中的字母分割出來放進數組,再迭代訪問object對象。
解決方案1:
在訪問對象之前,先將"["轉換成"."并將"]"轉換成""。
接著用split分割字符串。
用map函數迭代分割后的數組,呈現obj[b[c]]的形式訪問object。
function parse(obj, str) {str.replace('[', '.').replace(']', '').split('.').map((ele) => obj = obj[ele.trim()]);return obj || 'undefined'; }解決方案2:
function parse(obj, str) {var arr = str.replace('[', '.').replace(']', '').split('.');//循環方法迭代訪問for(var i=0;i<arr.length;i++) {if (obj[arr[i]]) {obj = obj[arr[i]];}else {return 'undefined';}}return obj; }解決方案3:
function parse(obj, str) {//使用reduce迭代var o = str.replace('[', '.').replace(']', '').split('.').reduce((pre,cur) => cur ? pre[cur] : pre,obj);return o || 'undefined'; }解決方案4:
//不替換掉中括號,直接判斷分割字符串 function parse(obj, str) {var o = str.split(/\.|\[|\]/).reduce((pre,cur) => cur ? pre[cur] : pre,obj);return o || 'undefined'; }解決方案5:
這可能是最簡潔的方法了...但是好像有點違背了題目的本意?:)
//使用eval()直接執行訪問語句 function parse(obj, str) {obj = eval('obj.'+str);return obj || 'undefined'; }?
end
轉載于:https://www.cnblogs.com/xiaokeai0110/p/9688242.html
總結
以上是生活随笔為你收集整理的【练习】实现一个parse方法(需要实现的效果见内容),方法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于 NodeJs 打造 Web 在线聊
- 下一篇: sleep()和yield()