将对象数组转换为另一个对象数组

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

谁能帮我优化代码并提出更好的方法(如果有的话)?

【问题讨论】:

您的预期输出与您的输入不匹配,您将tIDTaskID 以及NameTaskName 混合使用。您显示的代码将 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。

【讨论】:

以上是关于将对象数组转换为另一个对象数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将对象数组向上转换为另一种类型的对象数组?

使用map方法将javascript对象数组转换为其他对象数组[重复]

将对象数组转换为虚拟 mongodb 集合

如何在javascript中将对象数组过滤为另一个对象数组? [关闭]

变换对象数组的最有效方法

在JS中将对象数组减少为hashmap