Получить все объекты из состояния, имеющего несколько массивов - PullRequest
0 голосов
/ 30 октября 2018

На самом деле у меня есть данные о состоянии, которые являются объектом, он имеет следующую структуру,

{  one : [ { abc:1 }, { abc: 2 }], two : [ { abc:3 }, { abc: 4 }, three : [ { abc:5 }, { abc: 6 }]]   }

Так что это похоже на набор объектов в объекте состояния.

Теперь я хочу создать массив объектов, в котором будут все эти объекты.

Так что я хочу, чтобы это было,

[{ abc:1 }, { abc: 2 },{ abc:3 }, { abc: 4 },{ abc:5 }, { abc: 6 }]

Я пытался использовать for loop.

let quizCriteriaObj = [];

let low = this.props.lowQuizData["Low"];
let High = this.props.lowQuizData["High"];
let Medium = this.props.lowQuizData["Medium"];
console.log("data is ", low);

for (let i = 0; i <= low.length - 1; i++) {
    quizCriteriaObj.push(low[i]);
}
for (let i = 0; i <= High.length - 1; i++) {
    quizCriteriaObj.push(High[i]);
}
for (let i = 0; i <= Medium.length - 1; i++) {
    quizCriteriaObj.push(Medium[i]);
}
console.log(quizCriteriaObj);

Я взял каждое поле отдельно от этого объекта и использовал цикл for для каждого поля. ТАК, это работает для меня. Но я думаю, что это неправильное решение для меня. Есть что-то, что я делаю неправильно?

Ответы [ 5 ]

0 голосов
/ 30 октября 2018

Хороший вопрос Вы не можете просто распределить массивы, поэтому хороший один вкладыш
для этого будет.

state = {
  one : [ { abc:1 }, { abc: 2 }],
  two : [ { abc:3 }, { abc: 4 }], 
  three : [ { abc:5 }, { abc: 6 }]
}

var result = Object.values(state).flat()  // solution

console.log(result)
0 голосов
/ 30 октября 2018

Использовать lodash просто:

const obj = {один: [{abc: 1}, {abc: 2}], два: [{abc: 3}, {abc: 4}, три: [{abc: 5}, {abc: 6}]]}

_. Расплющить (объект)

// return => [{abc: 1}, {abc: 2}, {abc: 3}, {abc: 4}, {abc: 5}, {abc: 6}]

0 голосов
/ 30 октября 2018

Вы можете использовать для ... в петле

let obj = {  one : [ { abc:1 }, { abc: 2 }], two : [ { abc:3 }, { abc: 4 }], three : [ { abc:5 }, { abc: 6 }]   };

let result = [];
for (let key in obj) result = [...result, ...obj[key]];
console.log(result);
0 голосов
/ 30 октября 2018

Современный JavaScript делает это тривиальным

Array.prototype.flat

Обратите внимание: Array.prototype.flat является предложением TC39 этапа 3, поэтому не является частью спецификации ECMAScript (пока)
Он поддерживается во всех современных браузерах (и может быть заполнен при попытках Microsoft в браузерах, как Internet Explorer, так и Edgey)

Примечание: я предполагаю, что вы неправильно набрали "исходный" объект, потому что он был недействительным

let obj = {  
    one : [ 
        { abc:1 }, 
        { abc: 2 }
    ], 
    two : [ 
        { abc:3 }, 
        { abc: 4 }
    ],
    three : [ 
        { abc:5 }, 
        { abc: 6 }
    ]
}
let ftw = Object.values(obj).flat(); //<== single line of code is all you need
console.log(JSON.stringify(ftw))
0 голосов
/ 30 октября 2018

Вы можете использовать Object.values для преобразования объекта в массив. Используйте spread syntax и concat() для выравнивания массива

var obj ={"one":[{"abc":1},{"abc":2}],"two":[{"abc":3},{"abc":4}],"three":[{"abc":5},{"abc":6}]}

var result = [].concat(...Object.values(obj));
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...