首页 > 解决方案 > 尝试使用 reduce 方法在单个对象中折叠对象数组

问题描述

我一直在尝试使用数组的 reduce 方法将两个条目对象的列表汇总到一个对象中,但我得到的回报是最后一个条目的值。编码:

const swatches = [
           { emoji: "lion"    , color: "#ff691f" },
           { emoji: "tiger"   , color: "#fab81e" },
           { emoji: "fish"    , color: "#7fdbb6" },
           { emoji: "frog"    , color: "#19cf86" },
           { emoji: "pig"     , color: "#f58ea8" },
           { emoji: "unicorn" , color: "#981ceb" },
           { emoji: "rabbit"  , color: "#ffffff" },
           { emoji: "wolf"    , color: "#000000" },
           ]

const animals = swatches.reduce( (emojis, entry) => emojis[entry.emoji] = entry.color, {} )

标签: javascriptfunctional-programming

解决方案


您需要返回累加器emojis

const swatches = [
           { emoji: "lion"    , color: "#ff691f" },
           { emoji: "tiger"   , color: "#fab81e" },
           { emoji: "fish"    , color: "#7fdbb6" },
           { emoji: "frog"    , color: "#19cf86" },
           { emoji: "pig"     , color: "#f58ea8" },
           { emoji: "unicorn" , color: "#981ceb" },
           { emoji: "rabbit"  , color: "#ffffff" },
           { emoji: "wolf"    , color: "#000000" },
           ]

const animals = swatches.reduce(
    (emojis, entry) => (emojis[entry.emoji] = entry.color, emojis),
    {}
);

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


推荐阅读