实际上我有一个状态数据,它是一个对象,它具有以下结构,
{ 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循环。所以,它为我工作。但是,我认为这对我来说不是一个合适的解决方案。我做错了什么吗?
答案 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 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);
答案 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)