0

这是两行:

pixels[x-left] = {};
pixels[x-left][y] = true;

如果可以将两者组合成一个表达式,这将极大地允许我清理一些代码。

我的第一次尝试看起来像这样:

pixels[x-left] = { y: true };

但是,字母y被用作索引而不是 的值y,这是不行的。

4

2 回答 2

3

我将首先说应该首选 Bergi 的解决方案,但如果您不介意破坏代码的可读性:

(pixels[x-left] = {})[y] = true;

小提琴

这作为赋值表达式返回分配的值(在这种情况下,是对分配对象的引用)。

于 2013-04-15T00:16:33.507 回答
2

不,没有干净的*。对象字面量中的任何属性名称都按字面意思解释。

一种出路是某种辅助功能,例如

Object.set = function(o, p, v) { o[p] = v; return o; };

pixels[x-left] = Object.set({}, y, true);

但是每个阅读您的代码的人都需要了解Object.set.

* 在@Fabricio 的回答之后,我不能再说“不可能”了 :-)

于 2013-04-15T00:09:54.647 回答