如何在 javascript 中创建动态 json 对象
How to create dynamic json object in javascript
我正在 angular-ui-grid 中设置列,如下所示:
$scope.columns.push({
displayName: 'TimeStamp', field: 'x', width: $scope.setGridColumnWidth(), sort: {
direction: uiGridConstants.DESC,
priority: 1
}
});
for (let i = 0; i < view.trend.getTagsList().length; i++)
$scope.columns.push({ displayName: view.trend.getTagsList()[i].getTitle(), field: 'y' + view.trend.getTagsList()[i].getId(), width: $scope.setGridColumnWidth() });
因此,如果一个趋势包含 2 个标签,我将得到一个 ui 网格,其中列为 {x, y{id0}, y{id1} }
。
现在我尝试使用以下方式绑定数据:
$scope.data = [];
let taglist = view.trend.getTagsList();
for (let i = 0; i < taglist.length; i++)
for (let n of taglist[i].getData())
$scope.data.push({ x: n.x, 'y' + taglist[i].getId(): n.y });
但我无法使用 'y' + taglist[i].getId()
在 json 中动态定义属性,而是需要一个固定值。有人知道解决这个问题的好方法吗?
他们会允许你做这样的事情
$scope.data.push({ x: n.x, ['y' + view.trend.getTagsList()[i].getId()]: n.y });
您可以使用 ES6-ES5 转译器来实现此目的。我看到你用打字稿标记了这个。自 Typescript 1.5 起,编译器将处理此问题。对于那些卡在 ES5 上的人,请手动创建对象。
let obj = { x: n.x };
obj['y' + view.trend.getTagsList()[i].getId()] = n.y;
$scope.data.push(obj);
如果我理解正确的话,你想在你的对象中动态设置一个键。
您可以按如下方式进行:
var y_final = 'y' + view.trend.getTagsList()[i].getId();
var obj = {};
obj[y_final] = n.y;
obj[x] = n.x;
$scope.data.push(obj);
你试过先初始化对象吗?像...
var newObj = {"x": n.x};
eval ('newObj.y'+view.trend.getTagsList()[i].getId()+' = '+ n.y);
此处进行简单测试:https://jsfiddle.net/544vso45/
我正在 angular-ui-grid 中设置列,如下所示:
$scope.columns.push({
displayName: 'TimeStamp', field: 'x', width: $scope.setGridColumnWidth(), sort: {
direction: uiGridConstants.DESC,
priority: 1
}
});
for (let i = 0; i < view.trend.getTagsList().length; i++)
$scope.columns.push({ displayName: view.trend.getTagsList()[i].getTitle(), field: 'y' + view.trend.getTagsList()[i].getId(), width: $scope.setGridColumnWidth() });
因此,如果一个趋势包含 2 个标签,我将得到一个 ui 网格,其中列为 {x, y{id0}, y{id1} }
。
现在我尝试使用以下方式绑定数据:
$scope.data = [];
let taglist = view.trend.getTagsList();
for (let i = 0; i < taglist.length; i++)
for (let n of taglist[i].getData())
$scope.data.push({ x: n.x, 'y' + taglist[i].getId(): n.y });
但我无法使用 'y' + taglist[i].getId()
在 json 中动态定义属性,而是需要一个固定值。有人知道解决这个问题的好方法吗?
他们会允许你做这样的事情
$scope.data.push({ x: n.x, ['y' + view.trend.getTagsList()[i].getId()]: n.y });
您可以使用 ES6-ES5 转译器来实现此目的。我看到你用打字稿标记了这个。自 Typescript 1.5 起,编译器将处理此问题。对于那些卡在 ES5 上的人,请手动创建对象。
let obj = { x: n.x };
obj['y' + view.trend.getTagsList()[i].getId()] = n.y;
$scope.data.push(obj);
如果我理解正确的话,你想在你的对象中动态设置一个键。
您可以按如下方式进行:
var y_final = 'y' + view.trend.getTagsList()[i].getId();
var obj = {};
obj[y_final] = n.y;
obj[x] = n.x;
$scope.data.push(obj);
你试过先初始化对象吗?像...
var newObj = {"x": n.x};
eval ('newObj.y'+view.trend.getTagsList()[i].getId()+' = '+ n.y);
此处进行简单测试:https://jsfiddle.net/544vso45/