Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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/2/ssis/2.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 - Fatal编程技术网

按数组访问javascript对象值

按数组访问javascript对象值,javascript,Javascript,我有一个像:const obj={'abc':{'def':1}}这样的对象,我有一个像const arr=['abc','def']这样的数组,我如何用数组访问对象的obj.abc.def属性 显然,obj[arr]不起作用,而且obj[arr.join('.')也不起作用 我想做的是: const obj = { 'abc': {'def': 1 } } const arr = ['abc', 'def'] const value = obj[arr] // crash // va

我有一个像:
const obj={'abc':{'def':1}}
这样的对象,我有一个像
const arr=['abc','def']
这样的数组,我如何用数组访问对象的
obj.abc.def
属性

显然,
obj[arr]
不起作用,而且
obj[arr.join('.')
也不起作用

我想做的是:

const obj =  { 'abc': {'def': 1 } }  
const arr = ['abc', 'def']

const value = obj[arr] // crash 
// value should contain 1                                 

您只能通过索引访问数组属性。因此
arr[0]
将起作用

const obj={'abc':{'def':1}
常量arr=['abc','def']
常量值=对象[arr[0]][arr[1]]

console.log(value)
您只能通过索引访问数组属性。因此
arr[0]
将起作用

const obj={'abc':{'def':1}
常量arr=['abc','def']
常量值=对象[arr[0]][arr[1]]
console.log(value)
您可以对动态数组使用
Array\reduce

const obj={'abc':{'def':1}
常量arr=['abc','def']
常数res=arr.reduce((o,prop)=>o[prop],obj);
console.log(res)
您可以对动态数组使用
Array#reduce

const obj={'abc':{'def':1}
常量arr=['abc','def']
常数res=arr.reduce((o,prop)=>o[prop],obj);
console.log(res);
基础是

const obj={'abc':{'def':1}
常量arr=['abc','def']
console.log(obj[arr[0]][arr[1]];
基础是

const obj={'abc':{'def':1}
常量arr=['abc','def']
console.log(obj[arr[0]][arr[1]];
const obj={'abc':{'def':1}
常量arr=['abc','def']
var值=obj;
for(让arr的键){
值=值[键];
}
console.log(值);
const obj={'abc':{'def':1}
常量arr=['abc','def']
var值=obj;
for(让arr的键){
值=值[键];
}

log(value);
如果零件不可访问,则可以采用动态方法,减少键并采用默认对象

const
getValue=(对象,键)=>keys.reduce((o,k)=>(o |{})[k],对象),
obj={abc:{def:1}},
arr=['abc','def'],
值=获取值(obj,arr);
console.log(值);

log(getValue(obj,['foo',bar']);
如果某个零件不可访问,则可以采用动态方法减少键并使用默认对象

const
getValue=(对象,键)=>keys.reduce((o,k)=>(o |{})[k],对象),
obj={abc:{def:1}},
arr=['abc','def'],
值=获取值(obj,arr);
console.log(值);

console.log(getValue(obj,['foo','bar']);
您尝试做的有点被称为对象值“按路径获取”,一些库支持这一点,例如,它是一个可用于生产的库,您不应该尝试重新发明轮子(实践是可以的)

在您的上下文中,ramda的方法可以帮助您实现对任意属性数组的处理

const obj={
“abc”:{
“def”:1,
“ghi”:{
“jkl”:10
}
}
}
console.log(R.path(['abc','def'],obj))
log(R.path(['abc','ghi'],obj))
log(R.path(['abc','ghi','jkl'],obj))
console.log(R.path(['abc','ghi','jkl','mno'],obj))

您尝试执行的操作在某种程度上被称为对象值“按路径获取”,有些库支持此操作,例如,它是一个可用于生产的库,您不应该尝试重新发明轮子(实践是可以的)

在您的上下文中,ramda的方法可以帮助您实现对任意属性数组的处理

const obj={
“abc”:{
“def”:1,
“ghi”:{
“jkl”:10
}
}
}
console.log(R.path(['abc','def'],obj))
log(R.path(['abc','ghi'],obj))
log(R.path(['abc','ghi','jkl'],obj))
console.log(R.path(['abc','ghi','jkl','mno'],obj))

但这表示我需要知道对象嵌套的深度(我不知道)。在这种情况下,您可以在其上运行循环。属性的深度将为
arr.length
您可以尝试更新的答案。顺便说一句@hev1给出了一个很好的答案。但这表示我需要知道对象嵌套的深度我不知道。在这种情况下,你可以在它上面运行循环。属性的深度将是
arr.length
,你可以尝试更新的答案。顺便说一句@hev1给出了一个很好的答案。这是我提问的天性。我就是忍不住。为什么?你为什么想要或需要这样做?根据我的经验,如果你发现自己需要做什么的话这个边缘案例在你的设计中有一个比这个更大的缺陷。想想看。每个答案都会是一个循环的变化。这是我质疑的天性。我就是忍不住要问自己。为什么?为什么你会想要或需要这样做?根据我的经验,如果你发现自己需要做一些事情,这个边缘案例在你的设计中有一个更大的缺陷想想看,每一个答案都会是一个循环的变体。从另一方面来说,“重新发明轮子”通常不是小/简单想法的问题,仅仅为这个片段包含一个完整的库似乎是过度和低效的。(如果您已经使用了一个具有此功能的库,请务必使用它,但不要仅为此添加库)“重新发明轮子”通常不是小/简单想法的问题,另一方面,仅针对此片段包含整个库似乎是过度和低效的。(如果您已经使用了具有此功能的库,请务必使用它,但不要仅为此添加库)