我有多个这样的JSON
var object1 = {name: "John"};
var object2 = {location: "San Jose"};
它们不是嵌套或类似的东西。只是基本上不同的领域。我需要在node.js中将它们组合成一个JSON
,如下所示:
{name: "John", location: "San Jose"}
我可以很好地使用jQuery。以下是浏览器中的一个工作示例:
http://jsfiddle.net/qhoc/agp54/
但如果我在node.js中这样做,我不想加载jQuery (这有点过度使用,再加上node.js的jQuery在我的Windows机上不能工作)。
那么,有没有一种简单的方法可以在不使用jQuery的情况下执行类似于$.extend()
的操作呢
发布于 2013-02-20 16:01:49
一个正常的循环?
function extend(target) {
var sources = [].slice.call(arguments, 1);
sources.forEach(function (source) {
for (var prop in source) {
target[prop] = source[prop];
}
});
return target;
}
var object3 = extend({}, object1, object2);
这是一个基本的起点。您可能想要添加诸如hasOwnProperty
检查之类的东西,或者添加一些逻辑来处理多个源对象具有相同标识符的属性的情况。
这是一个working example。
附注:您所说的"JSON“实际上是普通的JavaScript对象。JSON只是一种文本格式,它与JavaScript有一些相同的语法。
发布于 2014-03-10 02:38:33
如果使用节点版本>= 4,请使用Object.assign()
(请参见Ricardo Nolde's answer)。
如果使用Node 0.x,则有内置的util._extend:
var extend = require('util')._extend
var o = extend({}, {name: "John"});
extend(o, {location: "San Jose"});
它不做深度复制,一次只允许两个参数,但它是内置的。我在一个关于在node:https://stackoverflow.com/a/15040626中克隆对象的问题中看到了这一点。
如果你担心使用一个"private“方法,你总是可以代理它:
// myutil.js
exports.extend = require('util')._extend;
如果它消失了,用你自己的实现来替换它。这是(大约)它们的实现:
exports.extend = function(origin, add) {
if (!add || (typeof add !== 'object' && add !== null)){
return origin;
}
var keys = Object.keys(add);
var i = keys.length;
while(i--){
origin[keys[i]] = add[keys[i]];
}
return origin;
};
发布于 2013-02-20 17:21:29
就像詹姆斯评论的那样,Underscore's extend
是实现这一目标的最简单、最快的方法。
下面是一个使用下划线的示例:
var _ = require('underscore'), // npm install underscore to install
object1 = {name: "John"},
object2 = {location: "San Jose"};
var target = _.extend(object1, object2);
对象1将获得object2的属性,并被返回并分配给目标。您也可以这样做,这取决于您是否介意object1被修改:
var target = {};
_.extend(target, object1, object2);
https://stackoverflow.com/questions/14974864
复制相似问题