所以说我有一个阵列而且我不知道它有多长:
var arr=["first","second","final"];
我有一个对象
var obj={
first:{
second:{
final:"asdf"
}
}
}
如何使它成为当触发下面的函数时,函数通过数组就像它会想的那样:
array [0]是第一个,然后让我们先在对象obj中找到。 arryr [1]是第二个,ok让我们先找到第二个等等,然后找到final的值。但请记住,实际的对象要复杂得多,所以你不能告诉我obj [arr [0]] [arr [1]] [arr [2]]或类似的东西。
function search(arr){
//wat here
}
答案 0 :(得分:1)
您可以像这样使用reduce()
。
var arr = ["first", "second", "final"];
var obj = {
first: {
second: {
final: "asdf"
}
}
}
var result = arr.reduce(function(r, e) {
return r[e]
}, obj)
console.log(result)

答案 1 :(得分:0)
您需要一个递归函数。这将从数组
中的嵌套对象获取所有值function flattenObject(theObject){
var flattenedArray = [];
function walkTheObject(theObject){
for (var key in theObject){
if (theObject.hasOwnProperty(key)){
var theElement = theObject[key];
if (typeof theElement === "object"){
walkTheObject(theElement);
}else{
flattenedArray.push(theElement);
}
}
}
}
walkTheObject(theObject);
return flattenedArray;
}
答案 2 :(得分:0)
对于未给定的属性,您可以将reduce与默认值一起使用。
function getValue(object, array) {
return array.reduce(function (o, k) {
return (o || {})[k];
}, object);
}
var array = ["first", "second", "final"],
object = { first: { second: { final: "asdf" } } };
console.log(getValue(object, array));
console.log(getValue(object, ['a', 'b']));