javascript - 如何在 JavaScript 中创建动态 json 对象

标签 javascript json typescript angular-ui-grid

我正在 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 个标签,我将获得一个包含 {x, y{id0}, y{id1} } 列的 ui 网格

现在我尝试使用以下方式绑定(bind)数据:

            $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 中动态定义属性,而是需要一个固定值。有人知道解决这个问题的好方法吗?

最佳答案

你想要ES6's dynamic properties.

他们会允许你做这样的事情

$scope.data.push({ x: n.x, ['y' + view.trend.getTagsList()[i].getId()]: n.y });

您可以使用 ES6-ES5 转译器来实现此目的。我看到你已经用 typescript 标记了这个。截至Typescript 1.5编译器会处理这个问题。对于那些坚持 ES5 的人,请手动创建对象。

let obj = { x: n.x };
obj['y' + view.trend.getTagsList()[i].getId()] = n.y;
$scope.data.push(obj);

关于javascript - 如何在 JavaScript 中创建动态 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37272589/

相关文章:

javascript - 如何在 JavaScript 中检查输入是否包含字符串

用于检测何时加载外部 JavaScript 的 JavaScript

java - 休息 API 示例

javascript - WebCryptoAPI 是否在浏览器或远程服务器上运行

typescript - 使用冒号和 as 语法来声明类型有什么区别?

typescript - TypeScript 中是否有秒表的任何实现?

javascript - 网络语音 api - 语音合成 .lang 属性不起作用

javascript - javascript 中的负面回顾

javascript - 如何从 JSON 数据文件访问某些信息?是通过数组的形式吗?

arrays - 如何在数组中保存多个json对象