【问题标题】:Coffeescript : Best way to find a structure entry in an arrayCoffeescript:在数组中查找结构条目的最佳方法
【发布时间】:2013-11-14 04:42:28
【问题描述】:
$scope.lastentries = []
e = {'min': $scope.minFoc, 'max': $scope.maxFoc, 'pas': $scope.pas}
$scope.lastentries.push(e)

我想查找 e 是否已经存储在数组中: 不幸的是,$scope.lastentries 中的 e 不起作用。 似乎没有看所有的领域,可能比较了一些“参考”。

当然,我可以在数组中循环并逐个字段比较所有结构。 但是有没有更简单的方法?类似 in 但会比较所有字段。

到目前为止,我正在做:

v = $scope.lastentries.filter (x) -> x.min == e.min and x.max == e.max and x.pas == e.pas
$scope.lastentries.push(e) if v.length == 0

如果有人有更“紧凑”/更好的做法,请分享。 谢谢!

【问题讨论】:

  • 它没有查看 任何 字段;对象按 ID 进行比较。您只能通过手动迭代数组并比较要用于测试相等性的任何一个或多个字段来做到这一点。

标签: javascript arrays coffeescript compare


【解决方案1】:

最简单的方法是使用Underscore.js(它真的很轻,所以包含它应该没有问题)。

使用它,你可以检查使用它的findWhere函数:

v = _.findWhere $scope.lastentries, e
$scope.lastentries.push(e)  unless v?

如果未找到匹配项,或者列表为空,v 等于 undefined

【讨论】:

    【解决方案2】:

    我相信 underscore 的 _.indexOf 会完成您正在寻找的内容:

     _.indexOf($scope.lastentries, e)
    

    如果包含在数组中,则返回e的索引位置,否则返回-1

    【讨论】:

    • 我认为这不是正确的答案。检查@meagar 对该问题的评论。
    • 我明白了。也许 _.isEqual 而不是单独比较每个字段会使代码更加comapct
    猜你喜欢
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多