繁体   English   中英

javascript数组转换为特定格式

[英]javascript array convert to specific format

对象数组是动态的

活动可以有四种类型(空闲,关闭,启动,等待)

如果活动状态为open ,则下一个活动状态为close,但活动是相同的。

如何转换为我的预期输出?

var arr = [
  { Activity: 'Idle', Activity_Status: 'Open', Activity_Date: "2018-09-02T12:30:00.000Z" },
  { Activity: 'Idle', Activity_Status: 'Close', Activity_Date: "2018-09-02T14:00:00.000Z"},
  { Activity: 'Down', Activity_Status: 'Open',  Activity_Date: "2018-09-02T17:30:00.000Z" },
  { Activity: 'Down', Activity_Status: 'Close', Activity_Date: "2018-09-02T19:00:00.000Z"}
]

预期输出为:

[
  { Activity: 'Idle', From: "2018-09-02T12:30:00.000Z", To: "2018-09-02T14:30:00.000Z" },
  { Activity: 'Down', From: "2018-09-02T17:30:00.000Z", To: "2018-09-02T19:00:00.000Z" }
]

我将创建一个键为“ Activity”值的对象,然后从结果对象获取值以产生所需的输出。

 var arr = [{ Activity: 'Idle', Activity_Status: 'Open', Activity_Date: "2018-09-02T12:30:00.000Z" }, { Activity: 'Idle', Activity_Status: 'Close', Activity_Date: "2018-09-02T14:00:00.000Z" }, { Activity: 'Down', Activity_Status: 'Open', Activity_Date: "2018-09-02T17:30:00.000Z" }, { Activity: 'Down', Activity_Status: 'Close', Activity_Date: "2018-09-02T19:00:00.000Z" }] var result = arr.reduce((mem, cur) => { var key = cur.Activity; if (mem[key]) { return cur['Activity_Status'] === 'Open' ? { ...mem, [key]: { ...mem[key], "From": cur['Activity_Date'] } } : { ...mem, [key]: { ...mem[key], "To": cur['Activity_Date'] } } } else { return cur['Activity_Status'] === 'Open' ? { ...mem, [key]: { ...mem[key], "From": cur['Activity_Date'], Activity: key } } : { ...mem, [key]: { ...mem[key], "To": cur['Activity_Date'], Activity: key } } } }, {}); console.log(Object.values(result)); 

由于打开状态紧随其后的是关闭状态,因此使用简单的for循环,通过执行i += 2来跳过其他所有索引,并为每次迭代合并当前对象和下一个对象,如下所示:

var result = [];
for(var i = 0; i < arr.length; i += 2) {
  result.push(
    { Activity: arr[i].Activity, From: arr[i].Activity_Date, To: arr[i + 1].Activity_Date }
  );
}

例:

 var arr = [ { Activity: 'Idle', Activity_Status: 'Open', Activity_Date: "2018-09-02T12:30:00.000Z" }, { Activity: 'Idle', Activity_Status: 'Close', Activity_Date: "2018-09-02T14:00:00.000Z"}, { Activity: 'Down', Activity_Status: 'Open', Activity_Date: "2018-09-02T17:30:00.000Z" }, { Activity: 'Down', Activity_Status: 'Close', Activity_Date: "2018-09-02T19:00:00.000Z"} ]; var result = []; for(var i = 0; i < arr.length; i += 2) { result.push( { Activity: arr[i].Activity, From: arr[i].Activity_Date, To: arr[i + 1].Activity_Date } ); } console.log(result); 

而且,如果您想要一种实用的方法,那么:

let result = Array.from({length: arr.length / 2}).map((_, i) =>
  ({ Activity: arr[i].Activity, From: arr[i].Activity_Date, To: arr[i + 1].Activity_Date })
);

例:

 var arr = [ { Activity: 'Idle', Activity_Status: 'Open', Activity_Date: "2018-09-02T12:30:00.000Z" }, { Activity: 'Idle', Activity_Status: 'Close', Activity_Date: "2018-09-02T14:00:00.000Z"}, { Activity: 'Down', Activity_Status: 'Open', Activity_Date: "2018-09-02T17:30:00.000Z" }, { Activity: 'Down', Activity_Status: 'Close', Activity_Date: "2018-09-02T19:00:00.000Z"} ]; let result = Array.from({length: arr.length / 2}).map((_, i) => ({ Activity: arr[i].Activity, From: arr[i].Activity_Date, To: arr[i + 1].Activity_Date }) ); console.log(result); 

 <script> var arr = [{Activity: 'Idle', Activity_Status: 'Open', Activity_Date: "2018-09-02T12:30:00.000Z" }, {Activity: 'Idle', Activity_Status: 'Close', Activity_Date: "2018-09-02T14:00:00.000Z"}, {Activity: 'Down', Activity_Status: 'Open', Activity_Date: "2018-09-02T17:30:00.000Z" }, {Activity: 'Down', Activity_Status: 'Close', Activity_Date: "2018-09-02T19:00:00.000Z"}]; var output = [ {Activity: 'Idle', From: "", To: "" }, {Activity: 'Down', From: "", To: "" }, {Activity: 'Up', From: "", To: "" }, {Activity: 'Waiting', From: "", To: ""} ]; var i =0; while(i < output.length){ var j = 0; var activity = output[i]["Activity"]; while(j < arr.length){ if(arr[j]["Activity"] == activity){ if(arr[j]["Activity_Status"] == "Open"){ output[i]["From"] = arr[j]["Activity_Date"]; }else if(arr[j]["Activity_Status"] == "Close"){ output[i]["To"] = arr[j]["Activity_Date"]; } } j++; } i++; } console.log(output); </script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM