在JavaScript中将数组转换为对象

在JavaScript中将数组转换为对象,javascript,arrays,angularjs,typescript,Javascript,Arrays,Angularjs,Typescript,我试图将一个数组转换成一个javscript对象,该对象设计用于处理AngularJS中的输入复选框 这是我从后端获取的输入阵列: let selectedRolesDB = ['ADMIN', 'SECURITY']; 这就是我的前端所期望的: let selectedRoles = { 'ADMIN' : true, 'SECURITY': true }; 我尝试了不同的方法,如angular.forEach,但问题是我无法获得所需的输出: angular.for

我试图将一个数组转换成一个javscript对象,该对象设计用于处理AngularJS中的输入复选框

这是我从后端获取的输入阵列:

let selectedRolesDB = ['ADMIN', 'SECURITY'];
这就是我的前端所期望的:

let selectedRoles =
  {
    'ADMIN' : true,
    'SECURITY': true
  };
我尝试了不同的方法,如angular.forEach,但问题是我无法获得所需的输出:

angular.forEach(selectedRolesDB,(value, key) => {
    this.selectedRoles.push({value : true });
});
谁能告诉我如何最好地解决我的问题,从而得到前端所期望的阵列


使用
数组。减少

让selectedRolesDB=['ADMIN','SECURITY'];
const newArray=selectedRolesDB.reduce((累加器,值)=>{
累加器[值]=真;
回流蓄能器;
}, {});

console.log(newArray)
selectedRoles
不是数组,而是对象。将其初始化为空对象:

let selectedRoles = {};

angular.forEach(selectedRolesDB,(value, key) => {
    // use [] notation to add property with required name and value
    selectedRoles[value] = true;
});

也许使用数组的原生“forEach”方法会更好(它有很好的浏览器支持,请参见此处)。如果您决定将项目迁移到Angular2+,这也会很有帮助,因此避免使用“angular.someMethod”是更好的方法。 这是最终解决方案:

const selectedRoles: {[key: string]: boolean} = {};
selectedRolesDB.forEach((value: string) => selectedRoles[value] = true);

问题用typescript标记,对于typescript,您还应该声明累加器的类型,因为这取决于编译器标志,否则将出现错误:
const newArray=selectedRolesDB.reduce((累加器,值)=>{acculator[value]=true;return acculator;},{})事实上,@TitianCernicova Dragomir,但是(根据问题中提供的代码),ts编译器没有使用任何特定的标志,并且似乎非常允许(我们也不能用typescript()编写代码片段)