跳到主要内容
CNode

nodejs与js中的通病“多级属性”取值崩溃的解决方案

分享
Aabans发布于 11 年前最后回复 11 年前
356820

库下载地址:Acan.js 在javascript中直接使用二级以上的属性的时候,会经常意外的让程序挂掉,原因是父属性为undefined,从而导致子属性取值崩溃 以下是Acan库中的解决方案,通过递归循环的去判断父属性是否存在,一级一级往下取值,如果取不到值可以付默认值 同时支持数组和对象的直接取值


/*
* 直接获取对象多级属性值 
* Acan.objGet(obj,'a.0.c') = obj.a[0].c 
* Acan.objGet(obj,'a.b.c') = obj.a.b.c 
*/
//df		Mixed		default (默认值)
Acan.objGet=function(obj,str,df){
	var rs='',p,o;
	if(Acan.isStr(str)){
		p=str.split('.');
	}
	if(Acan.isObj(obj) || Acan.isArr(obj)){
		o=obj;
		p.forEach(function(v){
			if(v.length<1 || (!Acan.isObj(o) && !Acan.isArr(o))){
				o=undefined;
				return;
			}
			if(o[v]){
				o=o[v];
			}else{
				o=undefined;
			}
		});
	}
	if(df!==undefined && o===undefined) o=df;
	return o;
}
查看回复

回复 (3)

L
luicfer#311 年前

lodash _.get没烦恼

J
jackhutu#211 年前

同感,mark

H
hoozi#111 年前

YUI里有个namespace的方法 可以实现多级 自豪地采用 CNodeJS ionic

参与回复

登录后即可参与回复。登录