nodejs合并数组

Posted

技术标签:

【中文标题】nodejs合并数组【英文标题】:nodejs merge array 【发布时间】:2012-09-01 15:03:40 【问题描述】:

我正在做一些 nodejs 摆弄来自 wordpress 的博客帖子和这些帖子的地理标记。我已将 geolite 集成到 nodejs 中,并从 wordpress 中获取客户端 ID。这是我的 nodejs 代码现在的样子。

native.on('data',
  function(data)
  
    //console.log(data)
    listener.sockets.emit('notification', data);
    jsonstring = JSON.parse(data)
    var ip = jsonstring.clientip
    var geo = geoip.lookup(ip);
    console.log(ip);
    console.log(geo);
    listener.sockets.emit('geodata', geo);
  
);

如您所见,lat / long 与 json 编码数据分开发送到套接字。

我想将 lat / long 合并到“数据”中并作为 1 个对象发送。我不知道该怎么做。我希望有人可以帮助我解决这个问题。

【问题讨论】:

【参考方案1】:

一个或两个 expando/ad-hoc 属性就足够了:

listener.sockets.emit('notification', data);
jsonstring = JSON.parse(data)
var ip = jsonstring.clientip
var geo = geoip.lookup(ip);
jsonstring.geo = geo;
// or
jsonstring.lat = geo.lat;
jsonstring.lng = geo.lng;

【讨论】:

这似乎可行,但我需要将“jsonstring”再次编码为 json,然后再将其发送到套接字。将数据添加到数组后如何进行json编码? 我最终得到了这个可行的解决方案。感谢您的帮助 :-) native.on('data', function(data) jsonstring = JSON.parse(data) var ip = jsonstring .clientip var geo = geoip.lookup(ip); jsonstring.lat = geo.ll[0]; jsonstring.lng = geo.ll[1]; jsondata = JSON.stringify(jsonstring); listener.sockets.emit('通知',jsondata);console.log(jsondata);); native.on('end', function() ); 【参考方案2】:

在发出之前将geo 信息添加为已解析数据对象的另一个属性:

native.on('data',
  function(data)
  
    var obj = JSON.parse(data)
    obj.geo = geoip.lookup(obj.ip);
    listener.sockets.emit('notification', JSON.stringify(obj));
  
);

【讨论】:

【参考方案3】:

你也可以使用

    listener.sockets.emit('notification', data);
    jsonstring = JSON.parse(data)
    var ip = jsonstring.clientip
    var geo = geoip.lookup(ip);
    jsonstring['geo'] = geo;

在jsonstring中追加数据

当我们有动态键值时,[ ] 会更有帮助

【讨论】:

以上是关于nodejs合并数组的主要内容,如果未能解决你的问题,请参考以下文章

nodejs_buffer.concat

nodejs中对于数组的相关处理

node 中间层怎样做的请求合并转发

Python进行数组合并的方法

java 合并排序数组 - 合并两个排序的数组

Matlab两个一维数组合并为一个数组?