将Knockout JS对象与Javascript对象合并

jam*_*ase 5 javascript json knockout.js

我试图异步发送一些数据作为单个对象.一半的数据来自我的KnockoutJS viewModel.另一半是我想要添加的一些数据.

我的想法是将它们都转换为JSON对象,然后使用数组.concat将它们放在一起.但这不起作用.你知道为什么吗?

我尝试了一些解决方案.第一种方法从JSON字符串构建对象,然后使用JSON.parse将它们作为对象.第二个尝试完全避免字符串.无论哪种方式,在我得到我的对象后,我尝试将它们连接在一起,但没有任何运气.

随着字符串

toAddString = '{"file": "thefile"}';
toAddObj = JSON.parse(toAddString);

koString = ko.toJSON(viewModel);
koObj = JSON.parse(koString,null,2);

finalObj = koObj.concat(toAddObj);
Run Code Online (Sandbox Code Playgroud)

用对象

toAddObj = [{"file": "thefile"}];

koObj = ko.toJS(viewModel);

finalObj = koObj.concat(toAddObj);
Run Code Online (Sandbox Code Playgroud)

对象(2)

toAddObj = new Object();
toAddObj.file = "one";

koObj = ko.toJS(viewModel);

finalObj = koObj.concat(toAddObj);
Run Code Online (Sandbox Code Playgroud)

你知道这里可能出了什么问题吗?

我想要的只是一个对象,无论是数组还是JSON对象,它包含来自每个源的数据.

Gre*_*egL 7

请尝试以下方法.我在猜测语法,因为我自己不使用Knockout,而且我正在使用该ko.utils.extend()函数将一个对象的属性复制到另一个对象上.

var toAddObj = { file: 'one' };

var koObj = ko.toJS(viewModel);

var finalObj = ko.utils.extend(toAddObj, koObj);
Run Code Online (Sandbox Code Playgroud)

请注意,不使用var您总是创建全局变量(通常是一个坏主意).