从具有多个数组的状态中获取所有对象

时间:2018-10-30 09:03:26

标签: javascript reactjs redux react-redux

实际上我有一个状态数据,它是一个对象,它具有以下结构,

{  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 :(得分:3)

现代javascript使得这个琐碎的事情

Array.prototype.flat

  

请注意:Array.prototype.flat是第3阶段TC39提案,因此尚不属于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))

答案 1 :(得分:2)

您可以使用Object.values将对象转换为数组。使用spread syntaxconcat()展平数组

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);

答案 2 :(得分:1)

您可以使用for...in循环

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);

答案 3 :(得分:0)

使用lodash很简单:

const obj = {一个:[{abc:1},{abc:2}],两个:[{abc:3},{abc:4},三个:[{abc:5},{abc: 6}]]}

_。flatten(obj)

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

答案 4 :(得分:0)

  

很好的问题,您不能简单地散布数组,从而获得很好的一个衬里
  因为会这样。

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)