Почему это превращается в 2d массив? - PullRequest
0 голосов
/ 10 мая 2018

У меня здесь есть какой-то фальшивый вопрос об объекте (не берите в голову вопрос и выбор, который они бредят)

const questions = {
  iq_test: {
    questions: [
    {
      question: 'Find the difference', 
      choices: ['a1', 'a2', 'a1', 'a3'], 
      correct: 0
    }, 
    {
      question: 'What is the next sequence', 
      choices: ['2', '5', '56', '64'],
      correct: 3
    }, 
    { question: 'What should be the next letter', 
      choices: ['c', 'z', 'e', 'f'],
      correct: 3
    }]
  },
 memory_test: {
   ...omitted
 }
}

Теперь я хочу iq_test

let retQuestions = Object.values(questions.iq_test).map(item => {
      console.log(item);
      return item;
})

Console.log внутри карты дает мне этот формат

    [ { question: 'Find the difference',
    choices: [ 'a1', 'a2', 'a1', 'a3' ],
    correct: 0 },
  { question: 'What is the next sequence',
    choices: [ '2', '5', '56', '64' ],
    correct: 3 },
  { question: 'What should be the next letter',
    choices: [ 'c', 'z', 'e', 'f' ],
    correct: 3 } ]

Но когда я console.log возвращаю retQuestions, которые должны содержать возвращаемое значение, я получаю другой формат

console.log (retQuestions)как вы можете видеть ниже, он превращается в 2d массив

[ [ { question: 'Find the difference', choices: [Array], correct: 0 },
    { question: 'What is the next sequence',
      choices: [Array],
      correct: 3 },
    { question: 'What should be the next letter',
      choices: [Array],
      correct: 3 } ] ]

Я хочу снова отобразить на этот раз ретроспективы, чтобы получить каждый вопрос, но не могу, так как формат меняется ..

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Метод Object.values ​​() возвращает массив значений собственного перечисляемого свойства данного объекта в том же порядке, что и в цикле for ... in (отличие состоит в том, что цикл for-inперечисляет свойства и в цепочке прототипов).

Итак, в вашем случае вам нужно выполнить map на questions.iq_test.questions, а поскольку вы просто возвращаете item, вы можете избежать return ключевое слово.

const questions = {
  iq_test: {
    questions: [
    {
      question: 'Find the difference', 
      choices: ['a1', 'a2', 'a1', 'a3'], 
      correct: 0
    }, 
    {
      question: 'What is the next sequence', 
      choices: ['2', '5', '56', '64'],
      correct: 3
    }, 
    { question: 'What should be the next letter', 
      choices: ['c', 'z', 'e', 'f'],
      correct: 3
    }]
  },
 memory_test: {
 }
}

let retQuestions = questions.iq_test.questions.map(item => item);
console.log(retQuestions);
0 голосов
/ 10 мая 2018

Object.values возвращает массив всех значений в этом объекте.Поскольку questions.iq_test сам по себе является объектом только с одной парой ключ-значение, в этом случае вы получите 2d-массив.Попробуйте войти в систему один раз.

Для того, чего вы пытаетесь достичь, вместо этого вы должны вызвать map непосредственно для значения объекта.Например,

let retQuestions = questions.iq_test.questions.map(item => {
      console.log(item);
      return item;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...