[英]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.