将对象数组转换为另一个对象数组
Posted
技术标签:
【中文标题】将对象数组转换为另一个对象数组【英文标题】:Converting Array of object to another array of objects 【发布时间】:2022-01-11 04:32:41 【问题描述】:我有一个对象数组,如下结构。
[
TaskID: "1001", TaskName: "task1", AID: "10",
TaskID: "1002", TaskName: "task2", AID: "10"
]
我必须从上面的数组创建一个数组到下面的结构。
[
"TaskID": 1,
"Value": "1001",
"AID": 10
,
"TaskID": 2,
"Value": "task1",
"AID": 10
,
"TaskID": 1,
"Value": "1002",
"AID": 10
,
"TaskID": 2,
"Value": "task2",
"AID": 10
,
]
我已经成功使用了下面的代码,但不确定它是不是最好的方法。
let taskIdArray = this.taskArray.map((tasks) =>
return
TaskID: 1,
Value: tasks.tID,
AId: tasks.AID
)
let taskNameArray = this.taskArray.map((tasks) =>
return
TaskID: 2,
Value: tasks.Name,
AId: tasks.AID
)
this.finalTaskArray = taskIdArray.concat(taskNameArray);
谁能帮我优化代码并提出更好的方法(如果有的话)?
【问题讨论】:
您的预期输出与您的输入不匹配,您将tID
与TaskID
以及Name
与TaskName
混合使用。您显示的代码将 TaskID 为 1 的所有元素放在 TaskID 为 2 的元素之前,但在您的预期输出中,ID 是交替的。
【参考方案1】:
Array#reduce 是到达那里的另一种方式。
let tasks = [
TaskID: "1001", TaskName: "task1", AID: "10",
TaskID: "1002", TaskName: "task2", AID: "10"
]
let newtasks = tasks.reduce( (b,a) => [...b, TaskID:1, Value: a.TaskID, AID: a.AID, TaskID:2, Value: a.TaskName, AID: a.AID],[])
console.log(newtasks);
【讨论】:
感谢 Octavian 和 Kinglish。两者都很有用。【参考方案2】:您还可以使用传递给map
回调的index
:
this.finalTaskArray = [].concat.apply([], this.taskArray.map((task, index) => [
TaskID: index + 1,
Value: task.TaskID,
AId: task.AID
,
TaskID: index + 2,
Value: task.Name,
AId: task.AID
]));
我还使用[].concat.apply([], arrayOfArrays)
来根据您的需要展平结构。我得到了灵感from this answer。
【讨论】:
以上是关于将对象数组转换为另一个对象数组的主要内容,如果未能解决你的问题,请参考以下文章
使用map方法将javascript对象数组转换为其他对象数组[重复]