微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

改善嵌套的每个

如何解决改善嵌套的每个

我有这个嵌套数组:

const users = [
    ['User_1',[[1596232800000,4]]],[
        'User_2',[
            [1591567200000,3],[1591653600000,16],],]

,并希望此输出

const dataByDate = [
    {
        user: 'User_2',date: 1591567200000,count: 3,},{
        user: 'User_2',date: 1591653600000,count: 16,{
        user: 'User_1',date: 1596232800000,count: 4,]

为此,我正在这样做:


    const dataByDate: { date: string; count: number; user: string }[] = []

    users.forEach((user: string[]) => {
        if (user[1].length) {
            user[1].forEach((item: any) => {
                dataByDate.push({ date: item[0],user: user[0],count: item[1] })
            })
        }
    })

我的解决方案工作正常,但我想知道是否有比嵌套的forEach更干净,更优雅的解决方案。谢谢!

解决方法

您可以将.flatMap与内部.map()一起使用。内部.map()将采用内部数组的第二个元素(即[[date,count],...]数组),并将它们映射到对象。由于.map()将导致对象数组,因此您可以使用.flatMap()将结果对象合并为一个最终的结果数组。

请参见以下示例:

const users = [
    ['User_1',[[1596232800000,4]]],[
        'User_2',[
            [1591567200000,3],[1591653600000,16],],];

const result = users.flatMap(([user,arr]) => arr.map(([date,count]) => ({
  user,date,count
})));
console.log(result);

然后您可以将.sort()方法应用于输出数组的任何其他重新排序。

,

使用Array.prototype.flatMap()Array.prototype.reduce()的组合。 reduce为用户循环遍历每个数据集,并为该集中的每个条目创建和对象。然后将该对象合并到累加数组中。

现在flatMap将为每个用户返回一个包含对象的新数组。对象的数量取决于[date,count]条目的数量,并且将位于嵌套数组中。 flatMap的平坦部分通过将每个对象放在单个数组中来解决此问题。

const users = [
  [
    'User_1',[
      [1596232800000,4]
    ]
  ],[
    'User_2',[
      [1591567200000,];

const formatUserData = users => users.flatMap(([ user,data ]) => 
  data.reduce((arr,[ date,count ]) => 
    [...arr,{ user,count }],[])
  );
  
const result = formatUserData(users);

console.log(result);

,

使用映射和数组解构,可以实现以下目标:

const result = users
   .map(([ user,items ]) => {
      return items.flatMap(([date,count]) => ({ user,count }))
   })
   .flatMap(i => i)
   .sort((a,b) => a.date - b.date);

const users = [
        ['User_1',[
            'User_2',[
                [1591567200000,]

const result = users.map(([ user,items ]) => {
  return items.flatMap(([date,count }))
}).flatMap(i => i).sort((a,b) => a.date - b.date);

console.log({result})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。