访问javascript中的嵌套数组/属性
来自的实用程序函数允许轻松访问对象的嵌套属性,如果父属性之一不存在,则返回null(或未定义) 原始代码:访问javascript中的嵌套数组/属性,javascript,arrays,Javascript,Arrays,来自的实用程序函数允许轻松访问对象的嵌套属性,如果父属性之一不存在,则返回null(或未定义) 原始代码: var childArray = [0,1,2] var parentArray = [{myArray: childArray}] var obj = {key: parentArray} 我真的很想使用它,但我也需要能够使用嵌套数组 示例: var childArray = [0,1,2] var parentArray = [{myArray: childArray}] var o
var childArray = [0,1,2]
var parentArray = [{myArray: childArray}]
var obj = {key: parentArray}
我真的很想使用它,但我也需要能够使用嵌套数组
示例:
var childArray = [0,1,2]
var parentArray = [{myArray: childArray}]
var obj = {key: parentArray}
我想像这样扩展实用程序函数:
get(obj, 'key[0].myArray[2]'); // 2
get(obj, 'key[0].foo[2]'); // null
get(obj, 'key[0].myArray[42]'); // null
理想情况下,它也应该能够评估这一点
var childArray = [0,1,2]
var parentArray = [childArray, childArray]
var obj = {key: parentArray}
get(obj, 'key[1][0]'); // 0
get(obj, 'foo[1][0]'); // null
问题:
var childArray = [0,1,2]
var parentArray = [{myArray: childArray}]
var obj = {key: parentArray}
是否可以使用给定的字符串引用访问数组arr
,如“arr[0]”
(不使用正则表达式删除括号…)
您知道一个更优雅的解决方案可以实现上述示例中给出的结果吗?我将使用一个属性名称数组,这将允许您轻松递归 但如果您想回到原始模式,仍然可以将表达式转换为该数组 看看这个例子:
var innerget=函数(对象,proparr){
如果(proparr.length==0)
返回对象;
如果(对象类型==“未定义”| |对象===null)
返回对象;
返回innerget(对象[proparr.splice(0,1)],proparr);
};
var get=函数(对象,expr){
var proparr=expr.replace(/\[/g,“.”)。replace(/\]/g,“.”)。split(“.”);
返回innerget(对象,proparr);
}
变量对象={
键:[[1,2,3],[4,5,6]]
};
write(innerget(对象,['key','key2',2])+“
”;
write(innerget(对象,['key',0,2])+“
”;
write(get(对象,“键[0][1]”)代码>通过发明Object.prototype.getNestedValue()
您可以通过对象属性和数组索引动态访问深度嵌套的值。您所要做的就是以正确的顺序动态地提供嵌套属性和索引作为参数
Object.prototype.getNestedValue=函数(…a){
返回a.length>1?(this[a[0]!==void 0和this[a[0]]。getNestedValue(…a.slice(1)):this[a[0]];
};
var arr=[{fox:[{turn:[857432]}],{sax:[{pana:[777987]}],{ton:[{joni:[123567]}],{piu:[{burn:[666,37]},{sia:[{foxy 404696]}],
myObj={foo:1,bar:{baz:2},bee:3},
arg1=3,
arg2=“piu”,
arg3=0,
arg4=“刻录”,
arg5=1;
write(arr.getNestedValue(arg1、arg2、arg3、arg4、arg5))代码>最简单的方法是更改传递给get()
从
到
var get=函数(obj,键){
返回键。拆分(“.”)。减少(函数(o,x){
返回(typeof o==“undefined”| | o===null)?o:o[x];
},obj);
}
var childArray=[0,1,2]
var parentArray=[{myArray:childArray}]
var obj={key:parentArray}
log(get(obj,'key.0.myArray.2');//2.
log(get(obj,'key.0.foo.2');//无效的
log(get(obj,'key.0.myArray.42');//无效的
var childArray2=[0,1,2]
var parentArray2=[childArray2,childArray2]
var obj2={key:parentArray2}
console.log(get(obj2,'key.1.0'));//0
console.log(get(obj2,'foo.1.0'));//null
只需更改“路径”:get(obj,'key.0.myArray.2')
()请回答这个问题,我将投票表决,并可能接受这个解决方案。
get(obj, 'key.0.myArray.2');