Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问javascript中的嵌套数组/属性_Javascript_Arrays - Fatal编程技术网

访问javascript中的嵌套数组/属性

访问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

来自的实用程序函数允许轻松访问对象的嵌套属性,如果父属性之一不存在,则返回null(或未定义)

原始代码:

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');