如何使用格式化字符串访问JavaScript对象中的SUB属性
How to use a formatted string to access SUB properties in a JavaScript object?
为了实现可重用代码,我试图通过使用"foo.bar.sub"之类的字符串来访问属性,从而避免对数千个复杂对象进行硬编码。
现在,我很快就找到了一个简单的算法,用于获取属性的值,如下所示:
getValueForPath : function(path) {
var pathArray = path.split('.'),
modelCopy = this;
while (pathArray.length > 0) {
modelCopy = modelCopy[pathArray.shift()];
}
return modelCopy;
},
但是,这只会返回属性的值,而不允许我设置属性的值。所以这只是问题的一半。理想情况下,我需要一种方法,对于给定的路径,返回属性本身,我不确定这在JavaScript中是否可能(但我不是JavaScript专家),或者我需要第二个函数来设置给定路径的属性,但我至今无法解决这个问题。
有什么想法吗?
如果您不想使用其他函数,可以使用
getValueForPath("foo.bar").sub = something;
或者,
setValueForPath: function(path, val) {
var pathArray = path.split('.'),
modelCopy = this;
while (pathArray.length > 1) {
modelCopy = modelCopy[pathArray.shift()];
}
return modelCopy[pathArray[0]] = val;
}
getValueForPath("foo.bar.sub", something);
同时考虑统一两个功能:
accessValueForPath: function(path, val) {
var pathArray = path.split('.'),
modelCopy = this,
b = val!==void 0;
while (pathArray.length > b) {
modelCopy = modelCopy[pathArray.shift()];
}
return b ? modelCopy[pathArray[0]] = val : modelCopy;
}
accessValueForPath("foo.bar.sub"); // read
accessValueForPath("foo.bar.sub", something); // write
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在选项卡上定义属性'的主窗口对象
- 锚点元素的href属性自动更改
- 未捕获的类型错误:无法读取 Google Analytics API 中 null 的属性“sub”
- 如何使用格式化字符串访问JavaScript对象中的SUB属性