【问题标题】:Make an array of objects from one object从一个对象创建一组对象
【发布时间】:2018-05-15 08:42:32
【问题描述】:

我有点迷失在我的函数式编程游戏中。

我有一个这样的对象:

const answers = {1: 'first', 2:'second', 3:'third', 4:'fourth'}

我想将对象重塑成这样的对象数组。

const arrayOfAnswers = [{1:'first'}, {2:'second'}, {3:'third'}, {4:'fourth'}]

实现这一目标的简单解决方案是什么?

【问题讨论】:

  • const answers = {1: first 2:second: 3:third 4:fourth} 错误。
  • @PraveenKumar 也许。我们也可能只是缺少定义的变量。
  • 提示:使用 Object.keys 之类的东西并映射数组。
  • @evolutionxbox 不,我指的是逗号。
  • @PraveenKumar 好的。 OP 在我打开问题之前对其进行了编辑。

标签: javascript functional-programming


【解决方案1】:

您可以使用键/值的破坏进行映射。

var answers = { 1: 'first', 2: 'second', 3: 'third', 4: 'fourth' },
    array = Object.entries(answers).map(([k, v]) => ({ [k]: v }));
    
console.log(array);

【讨论】:

  • 这是一个很好的答案,但结果类型(由 OP 询问)是如此奇怪,以至于它引出了一个问题,即如何使用这些数据......
【解决方案2】:

假设你的意思

answers = {1: "first", 2:"second" , 3:"third", 4:"fourth"};

使用Object.entriesmap

var output = Object.entries(answers).map( s => ({[s[0]]: s[1]}) )

【讨论】:

    【解决方案3】:

    你也可以使用Array.prototype.reduce方法。

    const answers = {1: 'first', 2:'second', 3:'third', 4:'fourth'};
    
    console.log(Object.entries(answers).reduce((acc, v) => acc.concat({[v[0]]: v[1]}), []));

    【讨论】:

      【解决方案4】:

      您可以使用迭代对象的键来做到这一点。我将给出一个 ES5 解决方案,假设:

      1. 其他人会提供 ES6 解决方案。
      2. 你假设answers = {1: "first", 2: "second" , 3: "third", 4: "fourth"}

      var answers = {
        1: "first",
        2: "second",
        3: "third",
        4: "fourth"
      };
      var finalAnswers = [];
      var ansKeys = Object.keys(answers);
      for (var i = 0; i < ansKeys.length; i++) {
        obj = {};
        obj[ansKeys[i]] = answers[ansKeys[i]];
        finalAnswers.push(obj);
      }
      console.log(finalAnswers);

      【讨论】:

        猜你喜欢
        • 2021-03-30
        • 2020-12-21
        • 2023-01-08
        • 2021-12-24
        • 1970-01-01
        • 2017-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多