json数组按照某两个属性拆为2维数组
时间: 2024-03-11 12:51:09 浏览: 70
可以使用JavaScript的Array.reduce()方法来实现将JSON数组按照某两个属性拆分为二维数组的功能。
假设我们有以下的JSON数据:
```
const data = [
{ name: 'Alice', age: 20, score: 80 },
{ name: 'Bob', age: 21, score: 90 },
{ name: 'Cindy', age: 20, score: 85 },
{ name: 'David', age: 22, score: 95 }
];
```
我们想要按照年龄和分数两个属性来拆分成二维数组。可以按照如下方式来实现:
```
const result = data.reduce((acc, cur) => {
const ageIndex = acc[0].indexOf(cur.age);
if (ageIndex === -1) {
acc[0].push(cur.age);
ageIndex = acc[0].length - 1;
acc[1][ageIndex] = [];
}
const scoreIndex = acc[1][ageIndex].indexOf(cur.score);
if (scoreIndex === -1) {
acc[1][ageIndex].push(cur.score);
scoreIndex = acc[1][ageIndex].length - 1;
}
acc[2][ageIndex][scoreIndex] = cur;
return acc;
}, [[], [], []])[2];
```
这段代码中,我们使用了reduce()方法来遍历JSON数组,并将其按照年龄和分数两个属性拆分成了二维数组。acc参数是我们的累加器,它包含了三个元素:
- 第一个元素是一个数组,用来存储所有不同的年龄值。
- 第二个元素是一个二维数组,用来存储每个年龄值下的不同分数值。
- 第三个元素是一个二维数组,用来存储最终的结果,即按照年龄和分数两个属性拆分后的JSON对象。
在reduce()方法中,我们首先在acc的第一个元素中查找当前JSON对象的年龄值是否已经存在。如果不存在,则将其添加到第一个元素的末尾,并在第二个元素中添加一个新的空数组来存储该年龄值下的分数值。然后我们再在该年龄值对应的分数值数组中查找当前JSON对象的分数值是否已经存在。如果不存在,则将其添加到该数组的末尾。最后,我们将当前JSON对象存储在acc的第三个元素中,对应的位置为[年龄值在第一个元素中的索引][分数值在第二个元素中的索引]。
最终,我们得到了一个二维数组,其中每个元素都包含了相同年龄和分数值的JSON对象。可以按照需要进行进一步处理或展示。
阅读全文