1

我试图通过在元素的初始即公共前缀中传递一个整数来从循环动态生成对象元素。

像这样:

           if(inventory.inventory_obj.length){
                obj.inventory_length = inventory.inventory_obj.length;
                for(var x=0; x < inventory.inventory_obj.length; x++){

                    obj.warehouse_+x = inventory.inventory_obj[x].warehouse;
                    obj.name_+x = inventory.inventory_obj[x].name;
                    obj.space_+x = inventory.inventory_obj[x].space;
                    obj.cost_+x = inventory.inventory_obj[x].cost;
                    obj.quantity_+x = inventory.inventory_obj[x].quantity;
                    obj.level_+x = inventory.inventory_obj[x].level;
                    obj.status_+x = inventory.inventory_obj[x].status;
                    obj.deleted_+x = inventory.inventory_obj[x].deleted;
                }
            }

做上述我得到"Invalid left-hand side in assignment"错误

我已经通过 console.log(inventory.inventory_obj) 测试了 inventory.inventory_obj 并验证了它是否具有所需的值。

我所做的其他尝试包括

                    obj.warehouse_+""+x = inventory.inventory_obj[x].warehouse;
                    obj.warehouse+"_"+x = inventory.inventory_obj[x].warehouse;
                    obj.warehouse_+x.toString() = inventory.inventory_obj[x].warehouse;
                    obj.warehouse.concat("_"+x+"") = inventory.inventory_obj[x].warehouse;
                    //Eliminating the underscore
                    obj.warehouse+x = inventory.inventory_obj[x].warehouse;

以上都失败了。

请有人帮我理解我做错了什么。

4

3 回答 3

3

要动态创建属性名称,请使用方括号表示法:

obj['warehouse_' + x] = nventory.inventory_obj[x].warehouse;
于 2013-07-18T06:38:07.447 回答
2

你不能+在名字obj.warehouse_+x和所有其他类似的情况下拥有。

您需要使用:obj["warehouse_" + x]用于动态对象键名。

对于连接尝试使用:

obj["warehouse_" + x] = obj["warehouse_" + x]  + inventory.inventory_obj[x].warehouse;

对象没有像字符串或数字 (+=) 那样的连接运算符。

于 2013-07-18T06:37:41.003 回答
0

尽管该语言不接受算术名称,除非您实际上是用它制作字符串,但我认为通过使用数组而不是许多类似命名的变量,您将获得更好的语义。

例如,如果有很多 indexed obj.warehouse,则应将其初始化为数组:

obj.warehouse=[];

然后,把东西放进去:

obj.warehouse[x] = inventory.inventory_obj[x].warehouse;

您以后访问它会更容易,因为您不必每次想要访问仓库时都进行连接。此外,只要有“连接”访问,只要重命名某些东西,调试就会很痛苦。

于 2013-07-18T06:51:51.070 回答