我希望有人可以帮助我使用此Javascript。

我有一个名为“设置”的对象,我想编写一个向该对象添加新设置的函数。

新设置的名称和值以字符串形式提供。然后,用下划线将给出设置名称的字符串分成一个数组。通过使用数组的每个部分指定的名称创建新的嵌套对象,新的设置应该添加到现有的“设置”对象中,最后一部分除外,最后一个部分应该是给出设置值的字符串。然后,我应该可以引用该设置,例如提醒其值(value)。我可以像这样以静态方式执行此操作...

var Settings = {};
var newSettingName = "Modules_Video_Plugin";
var newSettingValue = "JWPlayer";
var newSettingNameArray = newSettingName.split("_");

Settings[newSettingNameArray[0]] = {};
Settings[newSettingNameArray[0]][newSettingNameArray[1]] = {};
Settings[newSettingNameArray[0]][newSettingNameArray[1]][newSettingNameArray[2]] = newSettingValue;

alert(Settings.Modules.Mediaplayers.Video.Plugin);

...创建嵌套对象的部分正在执行此操作...
Settings["Modules"] = {};
Settings["Modules"]["Video"] = {};
Settings["Modules"]["Video"]["Plugin"] = "JWPlayer";

但是,由于组成设置名称的部件数量可能会有所不同,例如newSettingName可以是“Modules_Floorplan_Image_Src”,我想使用诸如...的功能来动态地做到这一点。
createSetting (newSettingNameArray, newSettingValue);

function createSetting(setting, value) {
    // code to create new setting goes here
}

谁能帮我解决如何动态地做到这一点?

我猜想那里必须有一个for ...循环才能遍历整个数组,但是我一直无法找到一种创建嵌套对象的方法。

如果您已经做到了这一点,非常感谢您花时间阅读,即使您无法帮助。

最佳答案

function assign(obj, keyPath, value) {
   lastKeyIndex = keyPath.length-1;
   for (var i = 0; i < lastKeyIndex; ++ i) {
     key = keyPath[i];
     if (!(key in obj)){
       obj[key] = {}
     }
     obj = obj[key];
   }
   obj[keyPath[lastKeyIndex]] = value;
}

用法:
var settings = {};
assign(settings, ['Modules', 'Video', 'Plugin'], 'JWPlayer');

关于javascript - Javascript:如何使用数组给定的对象名称动态创建嵌套对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5484673/

10-12 12:59
查看更多