如何使用变量键在一个语句中声明嵌套的Javascript对象

时间:2014-08-26 03:38:39

标签: javascript reactjs

这可能是Ruby做得更好的东西,但是有更好的方法来编写这个Javascript代码(对于React):

handleCellChange: function(rowIdx, prop, val) {
    var updateObj = {};
    updateObj.data = {};
    updateObj.data[rowIdx] = {};
    updateObj.data[rowIdx][prop] = { $set: val };

    var newState = React.addons.update(this.state, updateObj);

2 个答案:

答案 0 :(得分:7)

在ES6中,您可以使用计算属性名称:

updateObj = { data: { [rowIdx]: { [prop]: {$set: val} } } };

你可以在Traceur或Firefox中夜间使用它等等(但还没有在节点 - 和谐中)。

以下内容将为您解释这种语法:https://www.npmjs.org/package/es6-computed-property-keys

有关详细信息,请参阅http://wiki.ecmascript.org/doku.php?id=harmony:object_literals#object_literal_computed_property_keys。另请参阅http://kangax.github.io/compat-table/es6/#中的“计算属性”项。

答案 1 :(得分:1)

Javascript的对象文字符号(ES6之前版本)没有提供变量键。但是,您可以稍微减少分配数量:

handleCellChange: function(rowIdx, prop, val) {
  var updateObj = { data: {} };
  (updateObj.data[rowIdx] = {})[prop] = { $set: val };

您可能会或可能不会考虑任何改进 - 更简洁,但可能不太可读。我会全心全意地建议您将嵌套的data对象添加到updateObj的初始赋值(应该使用var,btw声明),如上所述。但是,使用data[rowIdx]的初始化结果作为一个值然后在同一行上编制索引的值更值得怀疑。