将js数组转换为字典映射

Converting js array into dictionary map

本文关键字:字典 映射 转换 js 数组      更新时间:2023-09-26

我有这个数组:

["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];
}

而CCD_ 1是阵列。我得到的[position]是一个字符串,它工作不好。

如何制作一个js函数,通过数组动态构建对象路径?

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方法可能需要polyfill:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight

下面的函数将使用一个要修改的对象和一个填充了所需属性的数组:

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中,以便可以对新对象生成下一个属性。

JSFiddle

递归函数

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;
}