【问题标题】:change array with objects into new array with objects将带有对象的数组更改为带有对象的新数组
【发布时间】:2017-11-16 12:40:44
【问题描述】:

嗨,我有这个带有对象的数组,

[
    {
         "QuestionID":1350,
         "Answers":[
                {
                     "AnswerId":"1350_1",                    
                     "selected":true
                },
                {
                     "AnswerId":"1350_2",                    
                     "selected":false
                },
                {
                     "AnswerId":"1350_3",                    
                     "selected":false
                }
         ]
    },
    {
         "QuestionID":1349,
         "Answers":[
                {
                     "AnswerId":"1349_1",                    
                     "selected":false
                },
                {
                     "AnswerId":"1349_2",                    
                     "selected":true
                },
                {
                     "AnswerId":"1349_3",                    
                     "selected":false
                }
         ]
    }
]

但应该改成这样,其中 answerID 是选择的答案 ID

[
    {
        "QuestionID": 1350, 
        "AnswerId": "1350_1"
    },
    {
        “QuestionID”: 1349, 
        “AnswerId”: "1349_2"
    }
]

【问题讨论】:

  • 是什么阻止你这样做?
  • 只是一个没有解释的糟糕问题......
  • 贴一些你试过的代码
  • 预期输出中的第二个对象使用所谓的"smart quotes",这使它在 MS Word 中看起来不错,但在 Javascript 中不正确。如果属性名称是有效标识符,则不需要引号。

标签: javascript arrays object


【解决方案1】:

你可以这样做:

data.map(item => ({
  QuestionID: item.QuestionID,
  AnswerId: item.Answers.find(answer => answer.selected).AnswerId,
}));

【讨论】:

    【解决方案2】:

    试试这个

    arr.map( s => (s.AnswerId = s.Answers.find( p => p.selected ).AnswerId, delete s.Answers, s) )
    

    解释

    • 使用ma​​p进行迭代
    • 重复每个问题的答案并找到一个selected == true
    • 删除answers

    演示

    var input = [{
        "QuestionID": 1350,
        "Answers": [{
            "AnswerId": "1350_1",
            "selected": true
          },
          {
            "AnswerId": "1350_2",
            "selected": false
          },
          {
            "AnswerId": "1350_3",
            "selected": false
          }
        ]
      },
      {
        "QuestionID": 1349,
        "Answers": [{
            "AnswerId": "1349_1",
            "selected": false
          },
          {
            "AnswerId": "1349_2",
            "selected": true
          },
          {
            "AnswerId": "1349_3",
            "selected": false
          }
        ]
      }
    ];
    
    var output = input.map(s => (s.AnswerId = s.Answers.find(p => p.selected).AnswerId, delete s.Answers, s));
    
    console.log(output);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      相关资源
      最近更新 更多