2013-04-15 105 views
0

这里有两条线:有没有一种简单的方法可以将这两行变成一行?

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

这将极大地让我清理一些代码,如果两者可以合并成一个单一的表达。然而信y被用来作为指标来代替的y的价值,这是不正常

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

我第一次尝试看起来是这样的。

+0

@Abbas'y'是一个变量。 –

+1

这是一个经常被问到的问题。我可以找到最多upvotes的重复:[使用一个Javascript对象键的变量](http://stackoverflow.com/questions/2274242/using-a-variable-for-a-javascript-object-key) – Bergi

回答

3

我就开始马上说BERGI的解决方案应该是首选,但如果你不这样做介意杀死你的代码的可读性:

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

Fiddle

这个工程作为assignment expression返回指定的值(在这种情况下,分配的对象的引用)。

+0

Aw,nice :-)当然,这会改变语句值,但它不应该影响 – Bergi

+0

语句后面有一个分号,我希望它不是另一个表达式的一部分,所以是的,它假设表达式的返回值并不重要。 '=]' –

+0

这不是“漂亮”,但这正是我所寻找的,谢谢! – Joncom

2

不,有不是不干净*。对象字面值中的任何属性名称都是从字面上解释的。

一条出路将是某种形式的辅助函数,如

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

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

但后来大家阅读你的代码需要了解Object.set

*后@法布里西奥的回答,我不能说出“没有可能”更多的:-)

+0

+ 1没有谋杀南极的海豹。 '=]'和提到的。 'xD' –

相关问题