CoffeeScript 由數(shù)組創(chuàng)建一個(gè)對(duì)象詞典

2022-06-29 16:53 更新

由數(shù)組創(chuàng)建一個(gè)對(duì)象詞典

問題

你有一組對(duì)象,例如:

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

但是你想讓它像詞典一樣,可以通過關(guān)鍵字訪問它,就像使用cats["Bubbles"]。

解決方案

你需要將你的數(shù)組轉(zhuǎn)換為一個(gè)對(duì)象。通過這樣使用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), {}

使用它時(shí)像下面這樣:

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

討論

另一種方法是使用數(shù)組推導(dǎo):

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

如果你使用Underscore.js,你可以創(chuàng)建一個(gè)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" }
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)