Javascript API 问题

Javascript API issue

我目前有这个

<option ng-id="1186384773090640435" value="1186384956868264500">Product Name</option>

我需要同时获取 id 和 value 并将其插入到下面:

moltin.Cart.Insert($scope.productId, qty, { "1186384773090640435" : { "1186384956868264500" : 1} }, function (cart) {

我该怎么做?

我目前正在做类似的事情,但它不起作用:

modi = $(this).attr('ng-id');
vari = $(this).attr('value');

moltin.Cart.Insert($scope.productId, qty, { modi : { vari : 1} }, function (cart) {

我可以假设它是因为值不是字符串或对象。不太确定。

创建对象文字时不能使用变量值作为对象属性名称(除非您正在编写 ES20015)。您将需要类似的东西:

modi = $(this).attr('ng-id');
vari = $(this).attr('value');
((insert = {})[modi] = {})[vari] = 1

moltin.Cart.Insert ($scope.productId, qty, insert, function ( ...

解释:

在第三行中,我们首先将一个名为insert 的变量设置为一个空对象(insert = {})。我们向该对象添加一个属性,其名称为变量 modi 的值,其值为空对象:( ...[modi] = {})。该空对象又被赋予一个属性,其名称为 vari 的值,其值为 1。整个表达式 returns 的值为 1 这解释了为什么我们需要设置一个变量名来引用第一个创建的对象。

Javascript 很随和 ;-)

或者(三行一个变量):

let insert = {};
(insert[$(this).attr('ng-id')] = {})[$(this).attr('value')] = 1
moltin.Cart.Insert ($scope.productId, qty, insert, function ( ...

在 ES2015 (ES6) 中,您可以直接将其编码为:

moltin.Cart.Insert ($scope.productId, qty, {[modi]: {[vari]: 1}}, function ( ...