js 处理一个对象 根据对象属性data数组长度{ data: [1, 2], mdData: [ [{x:1,y:10},{x:2,y:30},{x:31,y:40}], [{x:2,y:20},{x:3,y:40},{x:41,y:60}], [{x:3,y:30},{x:4,y:50},{x:51,y:70}], ] }处理成[[1,2,3],[2,3,4]]
时间: 2023-08-19 14:18:12 浏览: 34
可以使用 JavaScript 的 map 和 reduce 方法来实现该功能。具体实现如下:
```javascript
const obj = {
data: [1, 2],
mdData: [
[{ x: 1, y: 10 }, { x: 2, y: 30 }, { x: 31, y: 40 }],
[{ x: 2, y: 20 }, { x: 3, y: 40 }, { x: 41, y: 60 }],
[{ x: 3, y: 30 }, { x: 4, y: 50 }, { x: 51, y: 70 }]
]
};
const result = obj.mdData
.map(arr => arr.map(obj => obj.x))
.reduce((acc, curr) => {
acc.push([...Array(curr[0] - acc.length + 1)].map((_, i) => i + acc.length));
return acc.concat(curr.slice(1).map((_, i) => [i + acc.length + 1, i + acc.length + 2]));
}, []);
console.log(result); // 输出 [[1, 2, 3], [2, 3, 4]]
```
上述代码首先使用 map 方法将 mdData 数组中的每个子数组中的对象转化为其 x 属性组成的新数组,然后使用 reduce 方法将这些新数组合并为一个二维数组,其中每个子数组是原数组中相同下标对象的 x 属性组成的数组。在 reduce 方法中,我们使用了扩展语法和 Array 构造函数来创建一个包含缺失数字的数组,并使用 map 方法将其填充。最后得到的数组就是题目要求的结果。