使用Javascript优化Array中的自定义Object属性

时间:2011-06-09 22:44:48

标签: javascript

查看此Javascript函数中的3行代码。假设y始终是 String

function example(x, y) {
    var s = {};
    s[y]  = x;
    return s;
}

请注意以下几点:

  1. 不在函数中进一步包装
  2. 不使用;
  3. 是否可以将3行代码压缩成一行?

3 个答案:

答案 0 :(得分:4)

是的,有点丑陋的代码:

function example(x, y, s) {
  return (s = {})[y] = x, s;
}

额外的参数s没有传递给函数,它只是被声明为变量,所以你不需要额外的行var s;。 (如果你没有在本地声明它就变成了一个全局变量,这是不好的做法。)

赋值s = {}的值是指定的值,因此您可以进行赋值,然后继续使用表达式中的值。

逗号运算符返回最后一个值,例如(1,2)返回值2。这样,您可以向表达式添加, s,使其返回s

编辑:

另一种变体是使用s作为for循环中的变量,并退出循环:

function example(x, y) {
  for(var s = {}; s[y] = x, true;) return s;
}

答案 1 :(得分:1)

使用function作弊? :)

function example(x, y) {
    return new function () { this[y] = x; };
}

答案 2 :(得分:1)

总有邪恶的评价:

function example(x, y) {
  return eval('({' + y + ':"' + x + '"})');
}

但我仍然没有看到这一点。