Как преобразовать этот массив объектов? - PullRequest
2 голосов
/ 03 июля 2019

У меня проблема.

У меня есть этот массив объектов:

const iHaveThis = [{
    question: "What's your name?",
    answer: 'dda',
    form_filled_key: 15,
  },
  {
    question: "What's your e-mail?",
    answer: 'sda@br.com',
    form_filled_key: 15,
  },
  {
    question: "What's your e-mail?",
    answer: 'dAS@be.bimc',
    form_filled_key: 14,
  },
  {
    question: "What's your name?",
    answer: 'DAS',
    form_filled_key: 14,
  },
];

Я хочу преобразовать его в:

const iWillHaveThis = [{
    "What's your e-mail?": 'sda@br.com',
    "What's your name?": 'dda',
  },

  {
    "What's your e-mail?": 'dAS@be.bimc',
    "What's your name?": 'DAS',
  },
];

Как я могу это сделать?Пожалуйста

Я уже пробовал использовать уменьшение, карту, но не работает.

Ответы [ 5 ]

3 голосов
/ 03 июля 2019

Вы можете сделать объект привязанным к вашему form_filled_key.И в цикле добавьте объекты к объекту, используя ключ, чтобы сгруппировать их.В конце концов, ваше решение будет в Object.values() объекта, который вы построили:

const iHaveThat = [
  {question: "What's your name?",answer: 'dda',form_filled_key: 15,},
  {question: "What's your e-mail?",answer: 'sda@br.com',form_filled_key: 15,},
  {question: "What's your e-mail?",answer: 'dAS@be.bimc',form_filled_key: 14,},
  {question: "What's your name?",answer: 'DAS',form_filled_key: 14,},];

let arr = iHaveThat.reduce((obj, {form_filled_key, question, answer}) => {

    // make a new entry if needed
    if (!obj[form_filled_key]) obj[form_filled_key] = {}

    // add the key value pair
    obj[form_filled_key][question] = answer

    return obj
},{})

// you just want the array from `values()`
let result = Object.values(arr)
console.log(result)
3 голосов
/ 03 июля 2019

Надеюсь, что эта помощь

iHaveThat.map((v) => ({
   [v.question]:v.answer
}))

РЕДАКТИРОВАТЬ

var obj = {};
iHaveThat.forEach((v) => {
 // Checking if the key is available in the object or not. 
 //If key isn't available it will create the object for the key.
 if(!obj[v.form_filled_key])
  obj[v.form_filled_key] = { }
 // If object is already created we will just add new field in the object
 obj[v.form_filled_key][v.question] = v.answer
})
// To convert object into array of objects.
obj = Object.values(obj)
1 голос
/ 03 июля 2019

Вы также можете создать ES6 generator для пакетирования массива по 2, а затем Array.reduce над ним:

const arr = [
  { question: "What's your name?", answer: 'dda', form_filled_key: 15, },
  { question: "What's your e-mail?", answer: 'sda@br.com', form_filled_key: 15, },
  { question: "What's your e-mail?", answer: 'dAS@be.bimc', form_filled_key: 14, },
  { question: "What's your name?", answer: 'DAS', form_filled_key: 14, },
];

function* batch (arr, n=2) {
  let i = 0
  while (i < arr.length) {
    yield arr.slice(i, i + n).reduce((r,c) => (r[c.question] = c.answer, r), {})
    i += n
  }
}

let result = [...batch(arr)]

console.log(result)
1 голос
/ 03 июля 2019

Использование reduce.

const iHaveThis = [{question:"What's your name?",answer:'dda',form_filled_key:15,},{question:"What's your e-mail?",answer:'sda@br.com',form_filled_key:15,},{question:"What's your e-mail?",answer:'dAS@be.bimc',form_filled_key:14,},{question:"What's your name?",answer:'DAS',form_filled_key:14,}];

const res = Object.values(iHaveThis.reduce((a, { question, answer, form_filled_key }) => {
  (a[form_filled_key] = a[form_filled_key] || {})[question] = answer;
  return a;
}, {}));

console.log(res);
0 голосов
/ 03 июля 2019

Шаблон (object[key] = object[key] || {}) может использоваться для добавления значений, если они не существуют:

const arr = [{question: "What's your name?",answer: 'dda',form_filled_key: 15,},{question: "What's your e-mail?",answer: 'sda@br.com',form_filled_key: 15,},{question: "What's your e-mail?",answer: 'dAS@be.bimc',form_filled_key: 14,},{question: "What's your name?",answer: 'DAS',form_filled_key: 14}]

const result = Object.values(arr.reduce((o, v, i) => 
    ((o[i = v.form_filled_key] = o[i] || {})[v.question] = v.answer, o), {}))

console.log( result )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...