在JavaScript中将数组转换为对象
我试图将一个数组转换成一个javscript对象,该对象设计用于处理AngularJS中的输入复选框 这是我从后端获取的输入阵列:在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
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()编写代码片段)