在JavaScript中将数组转换为对象

时间:2018-03-13 11:35:35

标签: javascript arrays angularjs typescript

我正在尝试将数组转换为javscript对象,该对象旨在与AngularJS中的输入复选框一起使用。

这是我从后端获得的输入数组:

let selectedRolesDB = ['ADMIN', 'SECURITY'];

这是我的前端所期望的:

let selectedRoles =
  {
    'ADMIN' : true,
    'SECURITY': true
  };

我尝试了不同的方法,例如angular.forEach,但问题是我无法获得所需的输出:

angular.forEach(selectedRolesDB,(value, key) => {
    this.selectedRoles.push({value : true });
});

任何人都可以告诉我如何最好地解决我的问题所以我最终得到了我的前端所期望的阵列吗?

JSFiddle

3 个答案:

答案 0 :(得分:3)

使用array.reduce

    let selectedRolesDB = ['ADMIN', 'SECURITY'];
    const newArray = selectedRolesDB.reduce((accumulator, value) => {
       accumulator[value] = true;
       return accumulator;
    }, {});
    
    console.log(newArray)

有关它的文档,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

答案 1 :(得分:3)

selectedRoles不是数组,它是对象。将其初始化为空对象:

let selectedRoles = {};

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

答案 2 :(得分:0)

使用数组本地的每个'可能会好得多。方法(它有一个很好的浏览器支持,请参见此处Array forEach)。如果您决定将项目迁移到Angular2 +中,这将有所帮助,因此避免使用“angular.someMethod”#。是一种更好的方法。 这是最终的解决方案:

exec