【发布时间】:2014-10-19 20:41:41
【问题描述】:
如何在声明的对象中附加/添加具有相同键名的新属性?
代码如下:
// Declared object
var myObject = {
name : 'John',
age : 15,
};
// Array list of new property need to be add to myObject
var others = [
{ key : 'hobby', value: 'reading' },
{ key : 'hobby', value: 'writing' }
];
到目前为止我一直在尝试:
ko.utils.arrayForEach(others, function(other) {
myObject[other.key] = other.value;
});
和
ko.utils.arrayForEach(others, function(other) {
var extendObject = new Object();
extendObject[other.key] = other.value;
$.extend(myObject, extendObject);
});
结果仍然两者都不起作用。它只是替换现有的属性值
我需要的是这样的:
myObject: { name: 'John', age: 15, hobby: 'reading', hobby: 'writing' }
请注意:我不想让它成为数组:hobby: ['reading', 'writing']
更新:
我是为搜索功能实现的,上面的代码和细节是我被卡住的部分的简化版本。
这是我尝试完成的完整代码:
我的观点:
<form data-bind="submit: $root.getSearchData">
<input name="date_start" class="datepicker">
<div class="checkbox">
<label>
<input type="checkbox" name="user_id[]" value="1"> John
</label>
<label>
<input type="checkbox" name="user_id[]" value="2"> Michael
</label>
</div>
</form>
我的视图模型:
// Will contains new search property need to append to queryData
self.searchPropertyList = ko.observableArray();
// This function will fetch tasks from server
self.getTasksFromServer = function()
{
// Query data
var queryData = {
sort : 'start',
order: 'asc'
};
/**
* When getSearchData function fill formData into searchPropertyList observable,
* this function will get a notify and it will automatically loop through it
* and append new property to queryData.
*/
ko.utils.arrayForEach(self.searchPropertyList(), function(opt)
{
queryData[opt.name] = opt.value;
}
$.ajax({
url: 'api/tasks',
type: 'json',
data: queryData,
success: function(data)
{
}
});
}
// Returned form property as array into searchPropertyList observableArray
// and notify getTaskFromServer function
// This is how formData may look like
// formData = [{ name: 'date_start', value: '2014-08-26' }, { name: 'user_id[]', value: 1 }, { name: 'user_id[]', value: 2 }];
self.getSearchData = function(form)
{
var formData = $(form).serializeArray();
self.searchPropertyList(formData);
}
所以,ajax 会请求这样的东西:
api/tasks?sort=start&order=asc&date_start=2014-08-26&user_id[]=1&user_id[]=2
有人,请帮忙,谢谢:)
【问题讨论】:
-
{ key : 'hobby', value: 'reading writing' } nad 在阅读时将字符串拆分为 " " 以获取爱好的数组。不太确定你是否可以有 2 个属性同一个名称。
-
一个对象中不能有多个同名的属性。
-
一个对象中永远不会有两个同名的属性。数组似乎是你的救星
-
还有其他方法可以做到这一点吗?
-
是的,有一种方法:你需要使用一个数组。但是你的最终目标是什么?为什么数组不是你的解决方案?
标签: javascript jquery knockout.js javascript-objects