以下是两行:
pixels[x-left] = {};
pixels[x-left][y] = true;
如果两个代码可以组合成一个表达式,那么它将极大地允许我清理一些代码。
我的第一次尝试看起来像这样:
pixels[x-left] = { y: true };
然而,字母y
被用作索引而不是y
的值,这是不行的。
答案 0 :(得分:3)
我会立即开始说Bergi的解决方案应该是首选,但如果你不介意杀死代码的可读性:
(pixels[x-left] = {})[y] = true;
这可以作为assignment expression返回指定的值(在这种情况下,是对指定对象的引用)。
答案 1 :(得分:2)
不,没有没有干净的*。对象文字中的任何属性名称都按字面解释。
一种出路就是某种辅助功能,比如
Object.set = function(o, p, v) { o[p] = v; return o; };
pixels[x-left] = Object.set({}, y, true);
然后阅读代码的每个人都需要了解Object.set
。
*在@ Fabricio回答之后我不能再说“不可能”了: - )