以逗号分隔的方式组织键值对值

时间:2018-11-24 12:01:41

标签: javascript

我有两个这样的数组:

var actval = [
  0: "3"
  1: "22-Nov-2018 15:32:36 IST"
  2: "22-Nov-2018 15:32:40 IST"
  3: "3"
  4: "22-Nov-2018 15:32:36 IST"
  5: "22-Nov-2018 15:32:40 IST"
  6: "3"
  7: "22-Nov-2018 15:32:36 IST"
  8: "22-Nov-2018 15:32:40 IST"
]

var id = [
  0: "STATUS"
  1: "STARTTIME"
  2: "ENDTIME"
  3: "STATUS"
  4: "STARTTIME"
  5: "ENDTIME"
  6: "STATUS"
  7: "STARTTIME"
  8: "ENDTIME"
]

我想要做的是创建一个最终数组,该数组将具有键STATUSSTARTTIMEENDTIME,每个键可以具有多个这样的值:

finalarray = [
  STATUS: ["3", "3", "3"]
  STARTTIME: ["22-Nov-2018 15:32:36 IST", "22-Nov-2018 15:32:36 IST", "22-Nov-2018 15:32:36 IST"]
  ENDTIME: ["22-Nov-2018 15:32:40 IST", "22-Nov-2018 15:32:40 IST", "22-Nov-2018 15:32:40 IST"]
]

为此,我尝试了这种方法:

for (i = 0; i < id.length; i++) {
  currentKey = id[i];
  currentVal = actval[i];
  result[currentKey] = currentVal;
}

但是它给我每个键一个值,而不是每个值

如何获取链接到该键的数组中的每个值?

3 个答案:

答案 0 :(得分:2)

已解决 只需在代码中添加一张支票

尝试一下:

var result = [];
for (i = 0; i < id.length; i++) {
  let currentKey = id[i];
  let currentVal = actval[i];
  if(result[currentKey])    
      result[currentKey] = [...result[currentKey],currentVal];
  else
    result[currentKey] = [currentVal];
}

答案 1 :(得分:0)

尝试此操作,假设actval不是数组对象:

finalobject = {
STATUS: actval.filter(e=>e.length===1),
STARTTIME: actval.filter((e, i)=>i%3).filter((e, i)=>i%2===0),
ENDTIME: actval.filter((e, i)=>i%3).filter((e, i)=>i%2!==0),
};

当您澄清一些事情并将此“数组”更改为对象时,我将更新问题。

答案 2 :(得分:0)

如果actval总是这样,并且您想提取前3个值,则可以执行shift()这样的操作。

var final = {STATUS: [], STARTTIME:[], ENDTIME:[]};
for (let i=0; actval.length > i; i++) {

    final.STATUS.push( actval.shift() );

    final.STARTTIME.push( actval.shift() );

    final.ENDTIME.push( actval.shift() );

}

您正在做的只是使用=覆盖相同的数组值。

您一直在执行result ['key'] ='value';