function getValue(target, valuePath, defaultValue) {
var arrStr = valuePath.split(".");
var finValue = null;
if(Object.prototype.toString.call(target) === "[object Object]"){
for (i of arrStr){
if(/[A-Za-z]\[0\]/.test(i)){
var arrA = i.substr(0,1)
finValue = target[arrA][0]
}else if(/[/d]/.test(i)){
finValue = finValue[0];
}else{
finValue = finValue[i];
}
}
}
if(Object.prototype.toString.call(target) === "[object Array]"){
for (n of arrStr){
if(/[A-Za-z]\[0\]/.test(n)){
var arrA = n.substr(0,1)
finValue = finValue[arrA][0]
}else if(/[0]/.test(n) && finValue != undefined){
finValue = finValue[0];
}
else if(/[0]/.test(n) && finValue == undefined){
finValue = target[0];
}else{
finValue = finValue[n];
}
}
}
if( finValue == undefined){
return defaultValue
}else{
return finValue
}
}
var object = { a: [{ b: { c: 3 } }] }; // path: 'a[0].b.c'
var array = [{ a: { b: [1] } }]; // path: '[0].a.b[0]'
console.log(getValue(object, "a[0].b.c", 0)); // 输出3
console.log(getValue(array, "[0].a.b[0]", 12)); // 输出 1
console.log(getValue(array, "[0].a.b[0].c", 12)); // 输出 12
上面为代码正文。
下面为思路代码。
// for (const [key, value] of Object.entries(object)) {
// if(Object.prototype.toString.call(value) === "[object Object]"){
// console.log(1);
// }else{
// console.log(2);
// }
// }
// console.log("a[0].b.c".split("."));
var arrStr = "a[0].b.c".split(".")
var patt1 = new RegExp("[0]");
// var patt2 = new RegExp(/w)
// for (i of arrStr) {
// if(/[A-Za-z]\[0\]/.test(i)){
// console.log(i.substr(0,1),i.substr(1,3)); //a [0],思路就是用for去循环把值一个一个跳出来
// }
// }
// console.log(object['a'][0]['b']['c']);
(如果有人看到可以试试再精简一些)
小白,轻喷。