【问题标题】:How do I find an object by object inside a javascript array如何在 javascript 数组中按对象查找对象
【发布时间】:2013-12-22 02:25:33
【问题描述】:

我将 websocket 连接存储在一个数组中。这些是对象。我想在连接关闭时从数组中删除一个连接。

有什么方法可以找到与关闭连接匹配的连接对象并取消设置?

我不认为indexOf 有效,对吧?因为值是一个对象...

.......................

这里有一些代码

var connections = [];

websocketServer.on('request', function(request) {
  var connection = request.accept(null, request.origin);

  connection.on('message', function(message){
    if(message.type !== 'utf8')
      return;

    var msg = JSON.parse(message.utf8Data);

    if(msg.txt == 'something'){
      connections.push(connection);
    }

  });

  connection.on('close', function(connection) {
    // here remove connection object from connections array

  });
});

【问题讨论】:

  • 匹配对象的标准是什么?
  • if object1 == object2 ...但我需要以某种方式匹配确切的实例
  • 那么indexOf 本身应该可以工作。
  • indexOf 可以在包含多个相同类型对象的数组中找到对象的特定实例吗?
  • @thelolcat 您是说要查看数组以查找具有已关闭连接的对象,还是您有一个已知连接已关闭的对象 - 如果是这样,如何操作?

标签: javascript arrays node.js object


【解决方案1】:

你可以先indexOf 然后splice

var index = connections.indexOf(connection);
if(~index) connections.splice(index,1);

【讨论】:

  • 您可以在if 中执行~index
  • @elclanrs 打算这样做:D
【解决方案2】:

使用underscore.js 并致电_.isEqual(object, other);

Underscore 是一个用于 JavaScript 的实用工具带库,它提供了许多您在 Prototype.js(或 Ruby)中所期望的函数式编程支持,但没有扩展任何内置的JavaScript 对象。这是与 jQuery 的 tux 和 Backbone.js 的吊带搭配的领带。

【讨论】:

    猜你喜欢
    • 2022-01-18
    相关资源
    最近更新 更多