我有这个数组:
["userconfig", "general", "name"]
我希望它看起来像这样
data_structure["userconfig"]["general"]["name"]
我尝试过这个功能:
inputID = "userconfig-general-name"
function GetDataByID(inputID){
var position = '';
for (var i = 0; i < inputID.length; i++) {
var hirarchy = inputID[i].split('-');
for (var index = 0; index < hirarchy.length; index++) {
position += '["'+ hirarchy[index] +'"]';
}
}
return data_structure[position];
}
而hirarchy
是数组。我将[position]
作为一个效果不佳的字符串。
如何创建一个由数组动态构建对象路径的js函数?
答案 0 :(得分:2)
var arr = ["userconfig", "general", "name"];
var dataStructure = arr.reduceRight(function (value, key) {
var obj = {};
obj[key] = value;
return obj;
}, 'myVal');
结束为:
{ userconfig : { general : { name : 'myVal' } } }
请注意,reduceRight
方法可能需要填充:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight
答案 1 :(得分:0)
以下函数将修改一个对象,并使用所需属性填充数组:
function objPath(obj,path){
path.forEach(function(item){
obj[item] = {};
obj = obj[item];
});
}
var myobj = {};
objPath(myobj,["test","test2","test3"]);
console.log(myobj);
//outputs
Object {test: Object}
test: Object
test2: Object
test3: Object
该函数循环遍历数组,将新对象属性创建为新对象。然后它将对新对象的引用放入obj
,以便可以创建新对象的下一个属性。
答案 2 :(得分:0)
递归函数
var array = ["userconfig", "general", "name"];
function toAssociative(array) {
var index = array.shift();
var next = null;
if (array.length > 0) {
next = toAssociative(array);
}
var result = new Array();
result[index] = next;
return result;
}