Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在声明的对象中添加具有相同键名的新属性?_Javascript_Jquery_Knockout.js_Javascript Objects - Fatal编程技术网

Javascript 如何在声明的对象中添加具有相同键名的新属性?

Javascript 如何在声明的对象中添加具有相同键名的新属性?,javascript,jquery,knockout.js,javascript-objects,Javascript,Jquery,Knockout.js,Javascript Objects,如何在声明的对象中追加/添加具有相同键名的新属性 代码如下: // 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

如何在声明的对象中追加/添加具有相同键名的新属性

代码如下:

// 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;
});

结果仍然是两者都不起作用。它只是替换现有的属性值

我需要的是这样的东西:

myObject: { name: 'John', age: 15, hobby: 'reading', hobby: 'writing' }
api/tasks?sort=start&order=asc&date_start=2014-08-26&user_id[]=1&user_id[]=2
请注意:我不想让它成为数组:
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>
因此,ajax将请求如下内容:

myObject: { name: 'John', age: 15, hobby: 'reading', hobby: 'writing' }
api/tasks?sort=start&order=asc&date_start=2014-08-26&user_id[]=1&user_id[]=2

某人,请帮助,谢谢:)

正如评论所说,您不能有多个同名的财产

您可以这样做,将“嗜好”值添加到同一嗜好属性,并在需要所有嗜好时将其拆分:

var person = { hobby: "programmer" };

// adding another hobby
person.hobby =+ "-secretary";

var hobbies = person.hobby.split("-"); // [programmer,secretary]
副本


您必须使用{key,[array]}这是一种以array作为值的hashmap,并编写自定义方法来推送和弹出。

不能在对象中添加/附加具有不同值的相同键,但您可以添加和额外键,如下面的代码。通过执行此操作,您可以区分相同的键:

// Declared object
var myObject = {
    name : 'John',
    age  : 15,
};

// Array list of new property need to be add to myObject
var others = [
  {0 : { key : 'hobby', value: 'reading' }},
  {1 :{ key : 'hobby', value: 'writing' }}
];

{key:'hobby',value:'reading-writing'}nad在读取时拆分“”的字符串以获取兴趣爱好数组。不确定是否可以有两个同名属性。一个对象中不能有多个同名属性。一个对象中永远不会有两个同名属性。阵列似乎是你的救世主。还有其他方法可以做到这一点吗?是的,有一种方法:你需要使用阵列。但你的最终目标是什么?为什么阵列不是您的解决方案?您好@先生,谢谢您的回答!我已经更新了我的问题,你能看一下吗?如前所述,我不需要将值设置为数组。顺便说一句,谢谢你的回答,你能看看我最新的问题吗?也许你有其他的想法来帮助我完成它?你是在寻找knockoutjs绑定复选框解决方案吗?在名称中避免[]。这不是一个好的做法。不,我不需要直接绑定到observable的复选框,它将自动启动我的GettaskFromServer功能,而无需用户手动(单击)提交表单。您好,谢谢您的回答,您能看看我更新的问题吗?也许你会有一些其他的想法来帮助我实现这一点?嗨,Fariz Azmi,你从不在任何对象中添加/附加相同的键/值。我认为以上的解决方案我有平你。我会帮助你的。因为几天前,我面临着和你现在面临的同样的问题。我尝试了那个代码,它帮助了我。