我有一个看起来像这样的对象(它可以是无限的):
list: [
{
list: [
{
list: [
{...}
]
}
]
},
{
list: [
{...}
]
},
{
list: [
{...}
]
}
];
一个数组,指示我应该在这个对象中击中的位置;例如,如果我想进入第三个列表的第二个列表,如果有这个:
target = [3, 2];
我可以创建一个自定义调用,使用我的'target'数组在'list'中获取正确的对象。
感谢您的帮助!
编辑:
我刚刚做了:
var array = list;
for (var i = 0; i < target.length; i++) {
array = array[target[i]].list;
}
它有效。
由于
答案 0 :(得分:0)
我认为你正在寻找类似的东西:
var obj = {
list:[
{
list: [
{
list: []
}
]
},
{
list: [
{
list: []
}
]
},
{
list: [
{
list: []
},
{
list: []
},
{
list: []
},
{
list: [
{
list: [],
a: 5
}
]
}
]
}
]
};
function getListObject(theList, indexes) {
var i;
for(i = 0; i < indexes.length; i++) {
theList = (theList && theList.list) ? theList.list[indexes[i]] : null;
}
return theList;
}
alert(getListObject(obj, [2, 3, 0]).a);
如果你愿意,你可以使用reduce来实现,但我会通过for循环保持简单。
请注意,我传递了一个带有list属性的OBJECT,并且我正在获取一个带有list属性的对象。 构建一个获取数组并返回一个对象的函数是一个简单的编辑,但我觉得它不符合意图。
祝你好运!答案 1 :(得分:0)
由于对象可以深度嵌套,您也可以尝试递归,如下所示:
function getList(list, target){
var index = target[0] - 1;
if (target.length === 1) return list[index];
return getList(list[index].list, target.slice(1));
}
// invoke : var sublist = getList(obj.list, [3, 1]);
// sublist.push({});