//需求:寫一個方法,可以利用字符串路徑獲取對象集合的值,當值不存在時返回錯誤信息letobject={'a':[{'b':{'c':3}}]};let[err,result]=fn.get(object,'a[0].b.c');console.log(err,result);//=>null,3let[err,result]=fn.get(object,'a[0].d.c');console.log(err,result);//=>Iserrabout'd',nullfunctionfn(){/**aboutcode**/}有考慮到split('.'),但是a[0]這種怎么處理呢?謝謝!
2 回答

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
說個簡單思路,先split('.'),再split(']')唄,length>1了就說明有[],replace掉[,就是屬性名了。因為JS的語法特性,不光是數組,普通對象也可以用[]取屬性的,比如你上面的例子,實際等效于:a0['c']

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
letobject={a:[{b:{c:3}}]};constfn={get(object,condition){letconditionItem=condition.split(".");letdata=object;for(leti=0;iletitem=conditionItem[i].replace(/\[|\]/g,"").split(""); for(letj=0;jtry{ data=data[item[j]];}catch(error){return[`Iserrabout${conditionItem[i-1]}`,null];}}}return[null,data];}};可以在對[]進行判斷,可以有很多優化的地方。