我希望有人可以帮助我使用此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/