如何在JavaScript前端开发中有效地对数组中的相同值进行分组或归类?
时间: 2024-10-25 17:11:30 浏览: 12
在JavaScript前端开发中,可以使用多种方法来有效地对数组中的相同值进行分组或归类。以下是一些常见的技巧:
1. **使用reduce()函数**:`reduce()`函数可以遍历数组并基于指定规则将元素分组。你可以创建一个新的对象作为结果,其中键是值,值是一个新的数组包含所有相同的原始值。
```javascript
let array = [1, 2, 2, 3, 4, 4, 4, 'a', 'a', 'b'];
let grouped = array.reduce((acc, cur) => {
acc[cur] ? acc[cur].push(cur) : acc[cur] = [cur];
return acc;
}, {});
console.log(grouped); // {1: [1], 2: [2, 2], 3: [3], 4: [4, 4, 4], a: [‘a’, ‘a’], b: [‘b’]}
```
2. **使用Map结构**:Map同样可以存储键值对,如果键已经存在,则值会添加到现有列表中,否则创建新列表。
```javascript
let array = [1, 2, 2, 3, 4, 4, 4, 'a', 'a', 'b'];
let map = new Map();
array.forEach(item => {
if(map.has(item)) {
map.set(item, [...map.get(item), item]);
} else {
map.set(item, [item]);
}
});
let grouped = Array.from(map.values());
console.log(grouped);
```
3. **自定义函数结合filter()和indexOf()**:创建一个函数,检查当前元素是否已经在目标数组中,然后创建新的数组。
```javascript
function groupBy(array, key) {
let result = [];
array.forEach(item => {
if (!result.find(val => val[key] === item[key])) {
result.push({key: item[key], values: [item]});
} else {
let index = result.findIndex(val => val.key === item[key]);
result[index].values.push(item);
}
});
return result;
}
let array = [...]; // 重复的数组内容...
console.log(groupBy(array, 'value'));
```
阅读全文