首页 > 解决方案 > 将对象数组转换为嵌套对象数组

问题描述

实际上,我有一组要转换的对象。

[  
   { "val1":"2.0" },
   { "val2":"2.0" },
   { "val3":"2.0" },
   { "val1":"4.0" },
   { "val2":"2.0" },
   { "val3":"4.7" },
   { "val1":"4.0" },
   { "val2":"4.0" },
   { "val3":"4.0" }
]

我应该每三个项目把它们和一个父项目放在一个单独的数组中。

我会将其转换为这种格式

[  
   [  
      "20190201",
      [  
         { "val1":"2.0" },
         { "val2":"2.0" },
         { "val3":"2.0" }
      ]
   ],
   [  
      "20190202",
      [  
         { "val2":"2.0" },
         { "val3":"2.0" },
         { "val1":"4.0" }
      ]
   ]
]

其实这就是我做的

const returnData= fileDateName.map((_fileDate: string, _index: number) => {
        return [_fileDate, [
            filteredData[_index],
            filteredData[_index + 1],
            filteredData[_index + 2],
        ]];
    });

我的实际问题是我的输出不采用接下来的三个值,但每次它移动一个项目然后采用下一个值。我认为这是因为该_index值没有按应有的方式增加。

Index =0 
filteredData[0],
filteredData[1],
filteredData[2],
index=1
filteredData[1],
filteredData[2],
filteredData[3],
...

但迭代应该使

Index =0 
filteredData[0],
filteredData[1],
filteredData[2],
index=3
filteredData[3],
filteredData[4],
filteredData[5],
...

编辑

FileDateName= ["20190201","20190202","20190203"]

它如何在每次迭代时设置索引值?

标签: javascript

解决方案


你可以使用 Array#map 和 Array#slice 来做这样的事情。获取日期的索引并将其乘以 3 以找到应该获取数据的起始位置。

const dates = [20190201, 20190202, 20190203]
const data=[{"val1":"2.0"},{"val2":"2.0"},{"val3":"2.0"},{"val1":"4.0"},{"val2":"2.0"},{"val3":"4.7"},{"val1":"4.0"},{"val2":"4.0"},{"val3":"4.0"}]

const res = dates.map((date, index)=>{
  const start = index * 3;
  const end = start + 3;
  return [
    date,
    data.slice(start, end)
  ]
});

console.log(res);


推荐阅读