阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

    教程列表

    数据库
    抓包专区
    测试专区

    CoffeeScript 由数组创建一个对象词典

    由数组创建一个对象词典

    问题

    你有一组对象,例如:

    cats = [
      {
        name: "Bubbles"
        age: 1
      },
      {
        name: "Sparkle"
        favoriteFood: "tuna"
      }
    ]
    

    但是你想让它像词典一样,可以通过关键字访问它,就像使用 cats[“Bubbles”]。

    解决方案

    你需要将你的数组转换为一个对象。通过这样使用 reduce:

    # key = The key by which to index the dictionary
    Array::toDict = (key) ->
      @reduce ((dict, obj) -> dict[ obj[key] ] = obj if obj[key]?; return dict), {}
    

    使用它时像下面这样:

    catsDict = cats.toDict('name')
      catsDict["Bubbles"]
      # => { age: 1, name: "Bubbles" }
    

    讨论

    另一种方法是使用数组推导:

    Array::toDict = (key) ->
      dict = {}
      dict[obj[key]] = obj for obj in this when obj[key]?
      dict
    

    如果你使用 Underscore.js,你可以创建一个 mixin:

    _.mixin toDict: (arr, key) ->
        throw new Error('_.toDict takes an Array') unless _.isArray arr
        _.reduce arr, ((dict, obj) -> dict[ obj[key] ] = obj if obj[key]?; return dict), {}
    catsDict = _.toDict(cats, 'name')
    catsDict["Sparkle"]
    # => { favoriteFood: "tuna", name: "Sparkle" }
    
    卖前端学习教程

    只需几十元,就能买到培训班的内部教程!开启高薪之路!

    零基础小白阿里P7的教程都有!

    同时长期收购所有培训班的前端教程

    目录
    目录