我试图自己做,但我不知道这是否可能
function smth(){
var temp = [];
for(var i = arguments.length -1; i > 2; i-=1){
var temp2 = [];
temp.push(arguments[i]);
temp2.push(temp);
temp = temp2;
console.log(temp);
}
// I need to get array in this form
var something = item['collections']['0']['name'];
}
smth('collection','0','name');
好吧,也许我没有给你足够的信息。
我有一个JSON对象,我正在制作一个过滤函数,我想让它更可重用,因为现在我有了硬编码item.collections[0].name
,
有时我需要使用item.parameters.name
,我会再使用它几次
$scope.$watch(name, function (newValue, oldValue) {
if (newValue !== oldValue) {
$scope.productsChucks = myFilter(array, function(item) {
//console.log(item['collections']['0']['name']);
if (item.collections[0].name == $scope[compareWith]) {
return item;
}
});
}
});
答案 0 :(得分:1)
我认为你说的问题完全错了,恕我直言,这是一个典型的XY问题https://meta.stackexchange.com/a/66378
无论如何,基于你的编辑,我认为你真正想要的是使用"item.parameters.name"
形式的字符串来获取对象的一些嵌套属性。
最简单的方法是使用某种辅助库,例如。 lodash
:
_.get(item, 'parameters.name') // returns item.parameters.name
_.get(item, 'collections[0].name') // returns item.collections[0].name
使用它代码看起来类似于:
// path is a string given as the parameter to the filter
if (_.get(item, path) === $scope[compareWith]) {
return item;
}
您的函数smth
现在只能使用一个参数:
smth('collection[0].name');
有关lodash的更多信息,请访问https://lodash.com/docs#get
如果您认为自己不需要完整的lodash,那么您可以自己实现这一功能,请查看https://stackoverflow.com/a/6491621/704894
答案 1 :(得分:0)
如果您需要以这种方式访问它:
var something = item['collections']['0']['name'];
然后它不是一个数组,而是一个用索引表示法访问的对象。你可以这样做:
function smth() {
var temp = {};
var root = temp;
for (var i = 0; i < arguments.length; i++) {
temp[arguments[i]] = {};
temp = temp[arguments[i]];
}
return root;
}
console.log(JSON.stringify(smth('collection', '0', 'name'), null, 2));