получить все объекты внутри массива объектов - PullRequest
0 голосов
/ 05 ноября 2018

Я новичок в reactjs, а также в JavaScript.

Здесь у меня есть массив объектов, который похож на

[
  {
    "id": "CSS",
    "questionCount": [
      {
        "level": "TOUGH",
        "type": "NON_CODE",
        "count": "1"
      }
    ]
  },
  {
    "id": "Backbone",
    "questionCount": [
      {
        "level": "TOUGH",
        "type": "CODE",
        "count": "2"
      },
      {
        "level": "TOUGH",
        "type": "NON_CODE",
        "count": "5"
      },
      {
        "level": "MEDIUM",
        "type": "NON_CODE",
        "count": "7"
      },
      {
        "level": "EASY",
        "type": "NON_CODE",
        "count": "6"
      }
    ]
  },
]

Теперь я хочу получить массив объектов, в котором будут все объекты, присутствующие в массиве questionCount. так будет, как,

[  {
        "level": "TOUGH",
        "type": "NON_CODE",
        "count": "1"
      },  {
        "level": "TOUGH",
        "type": "CODE",
        "count": "2"
      },
      {
        "level": "TOUGH",
        "type": "NON_CODE",
        "count": "5"
      },
      {
        "level": "MEDIUM",
        "type": "NON_CODE",
        "count": "7"
      },
      {
        "level": "EASY",
        "type": "NON_CODE",
        "count": "6"
      } ]

Итак, кто-нибудь может мне помочь с этим?

Ответы [ 6 ]

0 голосов
/ 05 ноября 2018
// -- Use the swiss-knife-tool :-) (Lodash)
// -- Taking x as your array in the question, 
// -- you can use lodash to map specific attribute 
// -- and then flatten the output array.

const y = _
  .chain(x)
  .map(item => item.questionCount)
  .flatten()
  .value();

console.log(y);
0 голосов
/ 05 ноября 2018

С ES6 уменьшайте и распространяйте, вы можете сделать что-то вроде этого

const x = arr.reduce((accum, curr) => {
    let newArr = [...accum, ...curr.questionCount];
    return newArr
}, [])
0 голосов
/ 05 ноября 2018

Вы можете использовать Array.prototype.reduce () с Array.prototype.concat () :

const temp = [{"id": "CSS","questionCount": [{"level": "TOUGH","type": "NON_CODE","count": "1"}]},{"id": "Backbone","questionCount": [{"level": "TOUGH","type": "CODE","count": "2"},{"level": "TOUGH","type": "NON_CODE","count": "5"},{"level": "MEDIUM","type": "NON_CODE","count": "7"},{"level": "EASY","type": "NON_CODE","count": "6"}]},];
const result = temp.reduce((a, c) => a.concat(c.questionCount), []);

console.log(result);
0 голосов
/ 05 ноября 2018

Допустим, что temp задан массив, затем вы можете использовать массив questionCount, используя следующий код: -

finalArr=[]
for(var i=0;i<temp.length;i++) 
    finalArray.push(temp[i].questionCount)
0 голосов
/ 05 ноября 2018

Этот маленький кусочек кода сделает это

var newData = [];
for (var i of data) {
  newData = newData.concat(i['questionCount'])
}
0 голосов
/ 05 ноября 2018

Вы можете перебирать каждый элемент и объединять его с результатом. Попробуйте со следующим:

var jsonObject = [{"id": "CSS","questionCount": [{"level": "TOUGH","type": "NON_CODE","count": "1"}]},{"id": "Backbone","questionCount": [{"level": "TOUGH","type": "CODE","count": "2"},{"level": "TOUGH","type": "NON_CODE","count": "5"},{"level": "MEDIUM","type": "NON_CODE","count": "7"},{"level": "EASY","type": "NON_CODE","count": "6"}]}]

var result = [];
for(var t of jsonObject){

  if(t.questionCount){
    //As t.questionCount is an array, we need to add property to each of the element present in that array
    t.questionCount.forEach(obj => obj.Id = t.id);
    result = result.concat(t.questionCount);
   }
   
}
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...