js或等于运算符等价于ruby

时间:2017-12-09 00:50:30

标签: javascript ruby

在Ruby中,我可以执行以下操作:

very_long_dictionary_name = {}
very_long_key_name = "a"

# this code usually will run inside a function invoked twice,
# first with parameter "b" and after with parameter "c", so
# I don't know if very_long_dictionary_name[very_long_key_name]
# was initialized, inside the function
(very_long_dictionary_name[very_long_key_name] ||= []).push("b")
(very_long_dictionary_name[very_long_key_name] ||= []).push("c")

very_long_dictionary_name    #=> {"a" => ["b", "c"]}

我在Javascript中尝试过,我在||=遇到了语法错误。有没有办法在javascript 中将very_long_dictionary_name[very_long_key_name]设置为空数组,只要它未定义,而不重复那个长名称?

2 个答案:

答案 0 :(得分:0)

  

有没有办法设置   very_long_dictionary_name[very_long_key_name]作为空数组   javascript只有在未定义的情况下,不重复那个长名称?

不在JavaScript中。您可以使用一些简写的if语句将对象键设置为空数组,但是所有这些都需要您将对象+键至少写入两次以用于您尝试执行的操作。

在JavaScript中,对象通过引用传递,因此您可以使用'别名'对于你的对象键,可以在不必担心效率的情况下稍微整理你的代码。

let myRef = very_long_dictionary_name // Reference variable,
                                         changes with the object.

答案 1 :(得分:0)

如果我向我的very_long_dictionary_name对象添加一个辅助方法,我只能做一次。

var very_long_dictionary_name = {}
var very_long_key_name = "a"

very_long_dictionary_name.push = function(key, value) {
  if (!this.hasOwnProperty(key)) this[key] = []
  this[key].push(value)
}

very_long_dictionary_name.push(very_long_key_name, "b")
very_long_dictionary_name.push(very_long_key_name, "c")

return JSON.stringify(very_long_dictionary_name)
// {"a":["b","c"]}

在同一条指令中不再重复very_long_dictionary_namevery_long_key_name

此外,我必须确保帮助方法名称不会与某些可能的未来密钥冲突。