带有数组到数组的打字稿对象
Typescript object with arrays to array
我需要一些帮助来解决这个问题:)
我想将对象转移到数组中。预期结果应该是:
result = [
{
id: 'test-1',
message: 'test#1.1'
},
{
id: 'test-1',
message: 'test#1.2'
},
{
id: 'test-2',
message: 'test#2.1'
},
{
id: 'test-2',
message: 'test#2.2'
}
]
我明显的解决方案是使用 objects.keys() 和 map()。不幸的是,这不能按预期工作:
mockData = {
'test-1': [
{
message: 'test#1.1'
},
{
message: 'test#1.2'
}
],
'test-2': [
{
message: 'test#2.1'
},
{
message: 'test#2.2'
}
]
}
const result = Object.keys(this.mockData).map((id) => {
return {
id,
...this.mockData[id],
}
})
console.log(result)
我是否必须在 this.mockData[id] 上放置另一个 map()?我做错了什么以及这里的最佳实践是什么(也许是 reduce()?)?
希望你能帮帮我
这将是return想要的解决方案,
const arr = [];
Object.keys(mockData).forEach((key) => {
mockData[key].forEach((data) => {
arr.push({
id: key,
message: data.message
})
})
})
要取消分组,您可以 flatMap
the Object.entries
对分组对象进行嵌套 map()
调用分组数组元素。
const mockData = { 'test-1': [{ message: 'test#1.1' }, { message: 'test#1.2' }], 'test-2': [{ message: 'test#2.1' }, { message: 'test#2.2' }] };
const result = Object.entries(mockData).flatMap(([id, vs]) => vs.map(v => ({ id, ...v })));
console.log(result);
如果您愿意,也可以使用 for...of
循环
const mockData = { 'test-1': [{ message: 'test#1.1' }, { message: 'test#1.2' }], 'test-2': [{ message: 'test#2.1' }, { message: 'test#2.2' }] };
const result = [];
for (const [id, messages] of Object.entries(mockData)) {
for (const message of messages) {
result.push({ id, ...message });
}
}
console.log(result);
Object.keys(mockData)
.map((id) =>
mockData[id].map((l) => {
return { ...l, id };
})
)
.flat()
我需要一些帮助来解决这个问题:)
我想将对象转移到数组中。预期结果应该是:
result = [
{
id: 'test-1',
message: 'test#1.1'
},
{
id: 'test-1',
message: 'test#1.2'
},
{
id: 'test-2',
message: 'test#2.1'
},
{
id: 'test-2',
message: 'test#2.2'
}
]
我明显的解决方案是使用 objects.keys() 和 map()。不幸的是,这不能按预期工作:
mockData = {
'test-1': [
{
message: 'test#1.1'
},
{
message: 'test#1.2'
}
],
'test-2': [
{
message: 'test#2.1'
},
{
message: 'test#2.2'
}
]
}
const result = Object.keys(this.mockData).map((id) => {
return {
id,
...this.mockData[id],
}
})
console.log(result)
我是否必须在 this.mockData[id] 上放置另一个 map()?我做错了什么以及这里的最佳实践是什么(也许是 reduce()?)?
希望你能帮帮我
这将是return想要的解决方案,
const arr = [];
Object.keys(mockData).forEach((key) => {
mockData[key].forEach((data) => {
arr.push({
id: key,
message: data.message
})
})
})
要取消分组,您可以 flatMap
the Object.entries
对分组对象进行嵌套 map()
调用分组数组元素。
const mockData = { 'test-1': [{ message: 'test#1.1' }, { message: 'test#1.2' }], 'test-2': [{ message: 'test#2.1' }, { message: 'test#2.2' }] };
const result = Object.entries(mockData).flatMap(([id, vs]) => vs.map(v => ({ id, ...v })));
console.log(result);
如果您愿意,也可以使用 for...of
循环
const mockData = { 'test-1': [{ message: 'test#1.1' }, { message: 'test#1.2' }], 'test-2': [{ message: 'test#2.1' }, { message: 'test#2.2' }] };
const result = [];
for (const [id, messages] of Object.entries(mockData)) {
for (const message of messages) {
result.push({ id, ...message });
}
}
console.log(result);
Object.keys(mockData)
.map((id) =>
mockData[id].map((l) => {
return { ...l, id };
})
)
.flat()