在 JavaScript 中将数组转换为对象

Posted

技术标签:

【中文标题】在 JavaScript 中将数组转换为对象【英文标题】:Transforming array into a object in JavaScript 【发布时间】:2018-08-21 15:32:30 【问题描述】:

我正在尝试将一个数组转换为一个 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

【问题讨论】:

【参考方案1】:

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

let selectedRoles = ;

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

【讨论】:

【参考方案2】:

使用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。

【讨论】:

问题是用打字稿标记的,对于打字稿,你还应该根据编译器标志声明累加器的类型,否则你会得到一个错误:const newArray = selectedRolesDB.reduce< [role: string]: boolean >((accumulator, value) => accumulator[value] = true; return accumulator; , ); 确实,@TitianCernicova-Dragomir,但是(根据问题中提供的代码),ts 编译器不使用任何特定的标志,而且看起来非常宽松(我们也不能在打字稿:()【参考方案3】:

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

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

【讨论】:

以上是关于在 JavaScript 中将数组转换为对象的主要内容,如果未能解决你的问题,请参考以下文章

在Javascript / React中将对象转换为数组

在javascript中将字符串转换为对象数组的最佳方法?

如何在 Javascript 中将表单数组转换为 JSON? (对象数组)?

在Javascript中将对象转换为包含多个对象的数组的理想方法是啥? (允许 ES6)

在 JavaScript 中将对象转换为数组以进行存储并返回数组以用于应用程序

在Javascript中将JSON字符串转换为JSON对象数组