结合js中的地图对象

时间:2019-01-24 23:47:20

标签: javascript ecmascript-6

我有一个设置,试图使用地图返回一个样式对象。 目前,我的设置正在返回对象数组。我不确定我的第一种方法是否是一种有效的方法。

来自服务器的对象需要映射到以下值。

settings = {engine_background: "Gradient", wheel_padding: "100"}

我的React组件中的代码

  const map = {
    engine_background: value => colors[value],
    wheel_padding: value => ({ padding: `${value}px` }),
  };

  const colors = {
    Gradient: {
      background: 'linear-gradient(-80deg, #ffffff, #000000 100%)',
    },
  }; 

 const styles = Object.entries(settings).map(([k, v]) => map[k](v));

顶部的Object.entries(设置)向我返回2个对象的数组。

[{…}, {…}]
0: {background: "linear-gradient(-80deg, #ffffff, #000000 100%)"}
1: {padding: "100px"}

这不完全是我的理想选择,我希望我的Object.entries(settings)将map对象中的所有值返回为一个对象,以便我可以用它们设置组件样式。

示例:

{
  background: "linear-gradient(-80deg, #ffffff, #000000 100%)", 
  padding: "100px",
}

1 个答案:

答案 0 :(得分:0)

在对象数组上使用reducer创建单个对象:

const styles = Object.entries(settings).map(([k, v]) => map[k](v)).reduce((acc, val) => ({
  ...acc,
  ...val
}), {});

仅提供最终数据样本:

const input = [{background: "linear-gradient(-80deg, #ffffff, #000000 100%)"}, {padding: "100px"}];

console.log(input.reduce((acc, val) => ({
  ...acc,
  ...val
}), {}));