gpt4 book ai didi

javascript - 向 map map 添加新值的紧凑方式?

转载 作者:行者123 更新时间:2023-11-28 02:18:00 25 4
gpt4 key购买 nike

我编写了一个工具来计算文本中单词对的频率,这样每次单词 B 跟在单词 A 后面时,单词 [A][B] 的计数就会增加。

在 Perl 中,哈希值和哈希值的哈希值会在您第一次尝试访问它时自动实例化,这使得代码变得简单。在Javascript中,似乎必须首先创建内部结构,这使得代码更长。

在 Coffeescript 中,此功能:

class Adder
...
addPair: (word1, word2) ->
@count[word1] = {} if not @count[word1]?
@count[word1][word2] = 0 if not @count[word1][word2]?
++@count[word1][word2]

但这是两行额外的“防御”代码。有没有办法更紧凑地完成此操作,以便我可以维护更少的代码?

(将其放入三元语句中并不会真正使其更紧凑,只是在相同数量的逻辑中使用更少的字符。)

最佳答案

您可以使用 or= 运算符(或 ?=,但在这些情况下没有必要)来减少这些行的冗长性:

addPair: (word1, word2) -> 
@count[word1] or= {}
@count[word1][word2] or= 0
@count[word1][word2] += 1

您也可以将这两个初始化行合并为一个(尽管我认为这会导致代码可读性较差):

addPair: (word1, word2) -> 
(@count[word1] or= {})[word2] or= 0
@count[word1][word2] += 1

顺便说一句,支持这种自动对象创建的称为 autovivification ,和 has been discussed关于 CoffeeScript 问题。另外,Coco,一种源自 CS 的语言,has it :)

关于javascript - 向 map map 添加新值的紧凑方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16120973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com