首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在没有jQuery的node.js上组合或合并JSON

在没有jQuery的node.js上组合或合并JSON
EN

Stack Overflow用户
提问于 2013-02-20 15:57:14
回答 17查看 153.7K关注 0票数 81

我有多个这样的JSON

代码语言:javascript
复制
var object1 = {name: "John"};
var object2 = {location: "San Jose"};

它们不是嵌套或类似的东西。只是基本上不同的领域。我需要在node.js中将它们组合成一个JSON,如下所示:

代码语言:javascript
复制
{name: "John", location: "San Jose"}

我可以很好地使用jQuery。以下是浏览器中的一个工作示例:

http://jsfiddle.net/qhoc/agp54/

但如果我在node.js中这样做,我不想加载jQuery (这有点过度使用,再加上node.js的jQuery在我的Windows机上不能工作)。

那么,有没有一种简单的方法可以在不使用jQuery的情况下执行类似于$.extend()的操作呢

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2013-02-20 16:01:49

一个正常的循环?

代码语言:javascript
复制
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有一些相同的语法。

票数 42
EN

Stack Overflow用户

发布于 2014-03-10 02:38:33

如果使用节点版本>= 4,请使用Object.assign() (请参见Ricardo Nolde's answer)。

如果使用Node 0.x,则有内置的util._extend:

代码语言:javascript
复制
var extend = require('util')._extend
var o = extend({}, {name: "John"});
extend(o,  {location: "San Jose"});

它不做深度复制,一次只允许两个参数,但它是内置的。我在一个关于在node:https://stackoverflow.com/a/15040626中克隆对象的问题中看到了这一点。

如果你担心使用一个"private“方法,你总是可以代理它:

代码语言:javascript
复制
// myutil.js
exports.extend = require('util')._extend;

如果它消失了,用你自己的实现来替换它。这是(大约)它们的实现:

代码语言:javascript
复制
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;
};
票数 58
EN

Stack Overflow用户

发布于 2013-02-20 17:21:29

就像詹姆斯评论的那样,Underscore's extend是实现这一目标的最简单、最快的方法。

下面是一个使用下划线的示例:

代码语言:javascript
复制
var _ = require('underscore'), // npm install underscore to install
  object1 = {name: "John"},
  object2 = {location: "San Jose"};

var target = _.extend(object1, object2);

对象1将获得object2的属性,并被返回并分配给目标。您也可以这样做,这取决于您是否介意object1被修改:

代码语言:javascript
复制
var target = {};
_.extend(target, object1, object2);
票数 51
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14974864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档