动态合并对象-对象属性名称问题
Merge objects dynamically - Object Property Name Issue
我正在尝试将对象合并在一起,或向现有对象添加新对象。我已经得到了它的工作,因为合并使用jQuery,但它的属性的名称,不会动态工作。
参数filters
为对象,如{test:123}
。
调用filter({test:123});
时,我希望filter
函数动态地向全局对象添加对象。(当然不能使用push()
,因为它不是一个数组)
this.filter = function(filters) {
for (var key in filters) {
$.extend( settings.filter, {key:filters[key]} );
}
};
问题是"key"变成了"key"作为属性名。什么时候应该用"test"作为属性名;我无法获得动态创建的属性名称。
目标是允许用户像这样触发函数:filter({test:123,test2:1321,test55:4})
和动态地添加对象到全局设置对象,而不需要用户干预对象本身
您的代码不能工作,因为key在对象中直接设置时没有被解释为变量。
$.extend( settings.filter, {key:filters[key]} );
考虑:var keyName = "Test";
var badObj = { keyName: "Hello World" };
调用newObj.Test
时会得到undefined,因为它实际上是newObj.keyName
。
为了使用变量来创建属性名,需要使用不同的语法。
var keyName = "Test";
var newObj = {};
newObj[keyName] = "Hello World";
你可以引用并使用newObj.Test
来获取"Hello World"
要修复您提供的方法,您可以将其调整为:
this.filter = function(filters) {
for (var key in filters) {
if (filters.hasOwnProperty(key)) {
var newObj = {};
newObj[key] = filters[key];
$.extend(settings.filter, newObj);
}
}
};
请记住,您可以简化它并只使用extend方法。这将是更好的,除非你想做你自己的过滤,正如方法名所暗示的。
this.filter = function(filters) {
$.extend(settings.filter, filters);
};
演示应该在extend:
之前创建临时对象this.filter = function(filters) {
for (var key in filters) {
var obj = {};
obj[key] = filters[key];
$.extend( settings.filter, obj );
}
};
相关文章:
- node.js for循环在函数调用返回之前进行迭代,从而产生对象问题
- Safari 和 IE 中的 JavaScript 日期对象问题
- Knockoutjs 绑定对象问题
- Angular2 奇怪的硬编码对象与 http.get 对象问题
- Javascript 循环 + 对象问题:如何使用循环获取对象中的必需项
- 全局对象问题
- 量角器页面对象问题
- JavaScript对象问题
- 嵌套循环未形成完整对象 - 问题
- ExpressJS PUT方法未定义的对象问题
- 显示对象的对象问题
- React-Router的历史对象问题
- javascript的对象问题
- javascript中的对象问题
- Javascript对象问题
- JavaScript:对象问题
- 谷歌图书API JSON对象问题
- WebMethod返回JSON对象问题
- 对象问题中的 Jquery 对象
- Javascript 对象问题