首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据从这个数组推送到另一个数组使用最少的循环。

将数据从这个数组推送到另一个数组使用最少的循环。
EN

Stack Overflow用户
提问于 2020-09-04 06:33:47
回答 1查看 23关注 0票数 1

我想配置从'data2‘数组到'dataConvert’数组的数据,并希望找到另一种优化方法。

代码语言:javascript
复制
let dataConvert = [];

data2 = [
{
    time: "2020-7",
    tasks: [
      {
        key: "p1",
        value: 15
      },
      {
        key: "p2",
        value: 13
      },
    ]
  },
{
    time: "2020-8",
    tasks: [
      {
        key: "p1",
        value: 16
      },
      {
        key: "p2",
        value: 19
      },
    ]
  },
{
    time: "2020-9",
    tasks: [
      {
        key: "p1",
        value: 12
      },
      {
        key: "p2",
        value: 93
      },
    ]
  }
]

在将数据添加到“dataConvert”数组后,“dataConvert”的格式如下:

代码语言:javascript
复制
dataConvert = [
  ["x","2020-7", "2020-8", "2020-9"],
  ["p1", 15, 16, 12],
  ["p2", 13, 19, 93]
]

我试过使用reduce,我想找到另一种优化方法。

代码语言:javascript
复制
let dateConvert = [], valueConvert = [];
data2.forEach(x=>{
   let date = new Date(x.time);
   if (date) {
      let getYear = date.getFullYear();
      let getMonth = date.getMonth() + 1;
      let newDate = `${getYear}-${getMonth}-1`;
      return dateConvert = [...dateConvert, newDate];
   }
})
dateConvert.unshift("x");

// get p1 p2 value
let allTasks = data2.flatMap(x => x.tasks);

 valueConvert = Object.values(allTasks.reduce((arr, item) => {
 arr[item.key] = arr[item.key] || [item.key];
 arr[item.key].push(item.value);
 return arr;
}, {}));
dataConvert = [...[dateConvert], ...valueConvert];

谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-04 06:53:57

您可以使用嵌套循环并将索引存储在对象中,以便更快地访问key

代码语言:javascript
复制
const
    data = [{ time: "2020-7", tasks: [{ key: "p1", value: 15 }, { key: "p2", value: 13 }] }, { time: "2020-8", tasks: [{ key: "p1", value: 16 }, { key: "p2", value: 19 }] }, { time: "2020-9", tasks: [{ key: "p1", value: 12 }, { key: "p2",value: 93 }] }],
    dataConvert = [['x']],
    indices = {};

data.forEach(o => {
    dataConvert[0].push(o.time);
    o.tasks.forEach(({ key, value }) => {
        if (!(key in indices)) indices[key] = dataConvert.push([key]) - 1;
        dataConvert[indices[key]].push(value);
    });
});

console.log(dataConvert);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63736007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档