繁体   English   中英

从数组和 object 创建逗号分隔的数组

[英]Creating comma separated Array from an array and an object

我有一个具有独特年份的数组和另一个具有年份和值的 json object。

我想创建一个逗号分隔的数组,但将年份推送一次,并将值从 json object 推送到那一年。

预计 Output:

data= [
  { year:2015, value:[10,20,30]  }, 
  { year:2016, value:[50,60,70]  },
  { year:2017, value:[100,200,0] } 
] 

输入:

Unique = [2015,2016,2017]
data = [
  { Year: 2015, VALUE: 10 },
  { Year: 2015, VALUE: 20 },
  { Year: 2015, VALUE: 30 },
  { Year: 2016, VALUE: 50 },
  { Year: 2016, VALUE: 60 },
  { Year: 2016, VALUE: 70 },
  { Year: 2017, VALUE: 100 },
  { Year: 2017, VALUE: 200 },
  { Year: 2017, VALUE: 0 },
];

我试过的代码:

let uniDs:any =[];
Unique.forEach((u) => {
  data.forEach((k) => {
    let x = uniDs.filter((x) => x.Year == u);
    if (x.length > 0) {
      x[0].value.push(k.VALUE);
    } else {
      uniDs.push({ Year: k.Year, value: [k.VALUE] });
    }
  });
});
console.log(uniDs);

提前致谢。

 const Unique = [2015,2016,2017] const data = [ { Year: 2015, VALUE: 10 }, { Year: 2015, VALUE: 20 }, { Year: 2015, VALUE: 30 }, { Year: 2016, VALUE: 50 }, { Year: 2016, VALUE: 60 }, { Year: 2016, VALUE: 70 }, { Year: 2017, VALUE: 100 }, { Year: 2017, VALUE: 200 }, { Year: 2017, VALUE: 0 }, ]; const result = Unique.map( year => ({ year, value: data.filter( obj => obj.Year === year).map( obj => obj.VALUE ) }) ) console.log(result)

您可以根据unique数组过滤data ,然后使用array#reduce对年份结果进行分组,并使用Object.values()提取所有值。

 const unique = [2015,2016,2017], data = [ { Year: 2015, VALUE: 10 }, { Year: 2015, VALUE: 20 }, { Year: 2015, VALUE: 30 }, { Year: 2016, VALUE: 50 }, { Year: 2016, VALUE: 60 }, { Year: 2016, VALUE: 70 }, { Year: 2017, VALUE: 100 }, { Year: 2017, VALUE: 200 }, { Year: 2017, VALUE: 0 },], result = Object.values( data.filter(({ Year }) => unique.includes(Year)).reduce((r, { Year, VALUE}) => { r[Year] = r[Year] || {year: Year, values: []}; r[Year].values.push(VALUE); return r; },{}) ); console.log(result);

您可能不需要unique数组,因为您可以从数据中找出年份并合并同一年的值。

 const merge = (arr, output = {}) => { arr.forEach(({ Year, VALUE }) => { output[Year]??= []; output[Year].push(VALUE); }); return Object.entries(output).map(([year, value]) => ({ year, value })); }; const data = [ { Year: 2015, VALUE: 10 }, { Year: 2015, VALUE: 20 }, { Year: 2015, VALUE: 30 }, { Year: 2016, VALUE: 50 }, { Year: 2016, VALUE: 60 }, { Year: 2016, VALUE: 70 }, { Year: 2017, VALUE: 100 }, { Year: 2017, VALUE: 200 }, { Year: 2017, VALUE: 0 }, ]; console.log(merge(data));

暂无
暂无

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

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