reduce()产生对象的对象

时间:2018-11-21 07:38:55

标签: javascript

我正在尝试使用reduce()从另一个对象创建一个新对象

const FontFamilyMap = {
    SansSerif: {
        fontFamily: 'arial, helvetica, sans-serif'
    },
    Serif: {
        fontFamily: '"times new roman"'
    }
};

const test = Object.keys(FontFamilyMap).reduce((acc, cur) => {
    acc[cur] = {style: {fontFamily: FontFamilyMap[cur].fontFamily}};
    return acc;
}, {});
console.log(test);

这几乎可以正常工作,但是输出缺少style对象{fontFamily: FontFamilyMap[cur].fontFamily}的内部对象,请参见codepen

预期输出应如下所示...

SansSerif: {style: {fontFamily: 'arial, helvetica, sans-serif'}}

1 个答案:

答案 0 :(得分:0)

看起来,codepaen不会显示完整的对象,而只是显示Object的缩写。

要解决此问题,您可以使用JSON.stringify并使用来获取格式化的对象

console.log(JSON.stringify(test, null, 4)); 

这种方法可能不会显示功能或其他对象,例如“地图”或“集合”或其他数据结构。


您可以使用代码进行一些小的更改:

const
    FontFamilyMap = { SansSerif: { fontFamily: 'arial, helvetica, sans-serif' }, Serif: { fontFamily: '"times new roman"' } },
    test = Object
        .entries(FontFamilyMap)
        .reduce((acc, [key, style]) => Object.assign(acc, { [key]: { style } }), {});

console.log(test);
.as-console-wrapper { max-height: 100% !important; top: 0; }