【问题标题】:How to simplify two nested findWhere in underscore.js?如何简化 underscore.js 中的两个嵌套 findWhere?
【发布时间】:2016-12-26 01:29:36
【问题描述】:

假设我有一个这样的对象:

var data = [
    {   
        "class": 101,
        "students": [
            { "name": "bob", "grade": 98 },
            { "name": "alice", "grade": 87 }
        ]
    },
    {   
        "class": 103,
        "students": [
            { "name": "mike", "grade": 73 },
            { "name": "bill", "grade": 77 }
        ]
    }
]

有没有更简单的方法来使用underscore.js

_(_(data).findWhere({"class": 101}).students).findWhere({"name": "alice"}).grade // is 87

【问题讨论】:

  • 使用函数谓词?
  • 哦,您的意思是使用_.find() 和谓词?我什至没有想到这一点。这应该在一个函数中完成。
  • 我喜欢你的解决方案。我认为很难摆脱这个问题的双循环外观。也许为了可读性把它分开? var students = _.findWhere(data, { class: 101 }).students; var aliceGrade = _.findWhere(students, { name: 'alice' }).grade;

标签: javascript arrays object underscore.js


【解决方案1】:

希望对你有帮助

var student101 = _.findWhere(data, { "class": 101 }).students;

上面的代码给你这个 {“名称”:“鲍勃”,“等级”:98 }, {“姓名”:“爱丽丝”,“等级”:87 }

这样我们就得到了

_.find(_.findWhere(data, { "class": 101 }).students, function(num){ return  num.name  == 'alice'}).grade 

最终结果 87

【讨论】:

  • 这与使用两个findWhere 是一样的,只是它不一致,因为你先使用findWhere,然后是find
猜你喜欢
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 2012-02-14
  • 2022-06-24
  • 2014-11-28
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
相关资源
最近更新 更多