将数组映射到对象,使用数组值作为键

Map an array to an object, using array values as keys

我有

const menu = ['home', 'news', 'about'];

我想把它映射到这个:

let menuExt = 
 { 
  home: Common.locs['home'],
  news: Common.locs['news'],
  about: Common.locs['about'] 
 };

我该怎么做?我试过了

    let menuExt = menu.map(item => {
        return {
          item: Common.locs[item]
        }
    });

但我得到一个数组,其中“item”为 属性,但我想要一个具有属性 home、news、about... 的对象(还有很多,但我在这里将其缩短)

我是这样管理的,但我不知道是否有更干净、更快的解决方案:

    let menuExt = {}
    menu.forEach((item) => {
      menuExt[item] = Common.locs[item]
    });

惯用的方法是使用 Array.reduce,因为您要获取对象数组并返回单个对象。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

const menu = ['home', 'news', 'about'];

const menuExt = menu.reduce((acc, key) => {
     acc[key] = Common.locs[key];
     return acc;
}, {});
menu.map(item => {menuExt[item]=Common.locs[item]});