使用一个元素初始化数组,如果存在数组则使用push元素

Dan*_*scu 3 javascript arrays ecmascript-6

假设你有一个o数组哈希值; 例如,当每个事件可以有0个或更多回调时,事件的已注册回调.

在ES6中有更好的方式来说这个吗?

if (key in o) o[key].push(x); else o[key] = [x]
Run Code Online (Sandbox Code Playgroud)

"更好",我的意思是其他开发人员更容易理解.可能更简洁,但不以牺牲可读性为代价.特定(常见)问题o通常是较长的表达,例如this.listeners,重复三次似乎不是最理想的.所以真正的代码可能如下所示:

if (event in this.listeners)
    this.listeners[event].push(callback);
else
    this.listeners[event] = [callback];
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 7

您可以使用逻辑OR并在必要时创建数组.

o[key] = o[key] || [];
o[key].push(x);
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 3

通过当前处于第 4 阶段的提案逻辑分配,您可以执行以下操作:

(o[key] ||= []).push(x);
Run Code Online (Sandbox Code Playgroud)

主流浏览器都支持它。Typescript 也支持它(至少 4.1 及以上版本)