87,842
社区成员




var object={b:{c:4},d:[{e:5},{e:6}]}
parse(object,"b.c")==4 //true
parse(object,"d[0].c")==5 //true
parse(object,"d.0.c")==5 //true
parse(object,"d[1].c")==6 //true
parse(object,"d.1.c")==6 //true
parse(object,"f")==undefined //true
var object={b:{c:4},d:[{e:5},{e:6}]}
function parse(obj,v) {
var arr = v.match(/[\w\$]+/g);
while(typeof obj=="object" && arr.length>0) {
obj = obj[arr.shift()];
}
return obj;
}
console.log(parse(object,"b.c")==4);
console.log(parse(object,"d[0].e")==5);
console.log(parse(object,"d.0.e")==5);
console.log(parse(object,"d[1].e")==6);
console.log(parse(object,"d.1.e")==6);
console.log(parse(object,"f")==undefined);
function parse(object, sentence){
var chars = sentence.split(''),
nodes = [],
i, len, tmp;
// 解析语句
for(i=0, len=chars.length, tmp=''; i<len; ++i){
switch(chars[i]){
case '.':
if(tmp){
nodes.push(tmp);
tmp = '';
}
break;
case '[':
if(tmp){
nodes.push(tmp);
tmp = '';
}
for(++i; i<len; ++i){ // 寻找“]”
if(chars[i] === ']'){
nodes.push(tmp);
tmp = '';
break;
}else{
tmp += chars[i];
}
}
if(i === len) throw 'syntax error';
break;
default:
tmp += chars[i];
}
}
nodes.push(tmp);
// 获取数据
for(i=0, len=nodes.length, tmp=object; i<len; ++i){
tmp = tmp[ nodes[i] ];
}
return tmp;
}
var object={b:{c:4},d:[{e:5},{e:6}]};
console.log(parse(object,"b.c")==4);
console.log(parse(object,"d[0].e")==5);
console.log(parse(object,"d.0.e")==5);
console.log(parse(object,"d[1].e")==6);
console.log(parse(object,"d.1.e")==6);
console.log(parse(object,"f")==undefined);
var object={b:{c:4},d:[{e:5},{e:6}]}
function parse(obj,v) {
try {
var str = ("obj."+v).replace(/\.(\d+)/g,"[$1]");
return eval(str);
} catch(eo){
return undefined;
}
}
console.log(parse(object,"b.c")==4);
console.log(parse(object,"d[0].e")==5);
console.log(parse(object,"d.0.e")==5);
console.log(parse(object,"d[1].e")==6);
console.log(parse(object,"d.1.e")==6);
console.log(parse(object,"f")==undefined);