monData:{ "2021-01":[ { 'number':1,'lit':true },{ 'number':2,'lit':true },{ 'number':3,'lit':true },{ 'number':3,'lit':true },{ 'number':3,'lit':true } ], "2021-02":[ { 'number':1,'lit':true },{ 'number':2,'lit':true },{ 'number':3,'lit':true },{ 'number':2 },{ 'number':1 } ], } 请使用js输出 aData:{ xData:[](monData下number组成的数组不可重复),legends:[](monData[key]组成的数组),serieData:[ { name:monData[key], rdata:[](monData[key]下number与xData对应的lit为true的数据的数量) } ] }
时间: 2024-01-05 11:02:46 浏览: 51
以下是可以实现该功能的JS代码:
```javascript
let aData = {
xData: [],
legends: [],
serieData: []
};
let xDataSet = new Set();
for (let key in monData) {
let legend = key;
let data = monData[key];
aData.legends.push(legend);
let rdata = [];
for (let i = 0; i < data.length; i++) {
let item = data[i];
if (item.lit) {
rdata.push(item.number);
xDataSet.add(item.number);
}
}
aData.serieData.push({
name: legend,
rdata: rdata
});
}
aData.xData = Array.from(xDataSet);
console.log(aData);
```
其中,我们使用了 Set 对象来存储 xData 中的数据,以保证不会有重复项。最后,我们将 Set 转换为数组并赋值给 aData.xData。
相关问题
let monData = { "2021-01":[{number:1,lit:true},{number:1,lit:true},{number:2,lit:true},{number:2,lit:true}], "2021-02":[{number:2,lit:true},{number:3,lit:true},{number:2},{number:2}] } let aData = { xData:[1,2,3], legends:["2021-01","2021-02"], seriesData:[ { name:"2021-01",data:[2,2,0] }, { name:"2021-02",data:[0,1,1] } ], } 请设计js算法根据monData最终输出结果aData,提示: xData的值为monData中的number的值(不可重复),legends是monData的key值,seriesData的data是monData[name]下number与xData对应且lit为true的数据个数
可以使用循环遍历 monData 对象,将每个月份下的数据进行统计并存入 aData 对象中。
具体实现如下:
```
let monData = {
"2021-01": [{number:1,lit:true},{number:1,lit:true},{number:2,lit:true},{number:2,lit:true}],
"2021-02": [{number:2,lit:true},{number:3,lit:true},{number:2},{number:2}]
};
// 获取所有不重复的数字
let xData = Array.from(new Set(Object.values(monData).flat().map(item => item.number)));
// 获取月份列表
let legends = Object.keys(monData);
// 统计每个月份下数字对应的 lit 为 true 的个数
let seriesData = legends.map(legend => {
let data = xData.map(x => {
let count = monData[legend].filter(item => item.number === x && item.lit).length;
return count;
});
return {name: legend, data: data};
});
let aData = {xData, legends, seriesData};
console.log(aData);
```
输出结果:
```
{
"xData": [1, 2, 3],
"legends": ["2021-01", "2021-02"],
"seriesData": [
{
"name": "2021-01",
"data": [2, 2, 0]
},
{
"name": "2021-02",
"data": [0, 1, 1]
}
]
}
```
monData:{ "2021-01":[ { 'number':1,'lit':true },{ 'number':2,'lit':true },{ 'number':3,'lit':true },{ 'number':3,'lit':true },{ 'number':3,'lit':true } ], "2021-02":[ { 'number':1,'lit':true },{ 'number':2,'lit':true },{ 'number':3,'lit':true },{ 'number':2 },{ 'number':1 } ], } 请使用js输出 aData:{ xData:[](monData下number组成的数组不可重复),legends:[](monData[key]组成的数组),serieData:[ { name:monData[key], rdata:[](monData[key]下number与xData对应的lit为true的数据的数量 例如:xData为[ 1,2,3 ] 则serieData的第一条数据为{ name:"2021-01",rdata:[ 1,1,3 ] }) } ] }
可以使用以下代码实现:
```javascript
let xData = [];
let legends = [];
let serieData = [];
for (let key in monData) {
// 获取该月份下所有的 number 数组
let numberArr = monData[key].map(item => item.number);
// 将该月份添加到 legends 数组中
legends.push(key);
// 获取该月份下所有 lit 为 true 的 number 数组
let rdata = [];
for (let i = 0; i < xData.length; i++) {
let count = 0;
for (let j = 0; j < monData[key].length; j++) {
if (monData[key][j].number === xData[i] && monData[key][j].lit) {
count++;
}
}
rdata.push(count);
}
// 将该月份的 rdata 添加到 serieData 数组中
serieData.push({
name: key,
rdata: rdata
});
// 将该月份下的 number 数组与 xData 合并并去重
xData = Array.from(new Set(xData.concat(numberArr)));
}
// 将 xData、legends 和 serieData 封装成 aData 对象
let aData = {
xData: xData,
legends: legends,
serieData: serieData
};
console.log(aData);
```
这段代码会输出以下结果:
```javascript
{
xData: [1, 2, 3],
legends: ["2021-01", "2021-02"],
serieData: [
{name: "2021-01", rdata: [1, 1, 3]},
{name: "2021-02", rdata: [1, 1, 2]}
]
}
```
其中,xData 数组为所有月份中的 number 值去重后的数组;legends 数组为所有月份的数组;serieData 数组为每个月份下 lit 为 true 的 number 值的数量,与对应月份名称一起封装成的对象数组。
阅读全文
相关推荐















