1、计算数组的单个值: 您可以使用
reduce
方法基于数组元素计算单个值。例如,您可以计算数组中所有数字的总和或连接字符串。
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, current) => acc + current, 0);
console.log(sum); // 输出: 15
2、转换数据结构:
reduce
可用于将数组转换为不同的数据结构,例如对象或嵌套数组。
const data = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
const idMap = data.reduce((acc, obj) => {
acc[obj.id] = obj.name;
return acc;
}, {});
console.log(idMap);
// 输出:
// {
// 1: 'Alice',
// 2: 'Bob',
// 3: 'Charlie'
// }
3、展平数组: 您可以使用
reduce
将具有嵌套数组的数组展平为单层数组。
const nestedArray = [[1, 2], [3, 4], [5, 6]];
const flattenedArray = nestedArray.reduce((acc, current) => acc.concat(current), []);
console.log(flattenedArray); // 输出: [1, 2, 3, 4, 5, 6]
4、数据分组:
reduce
可用于根据键或条件对数组中的元素进行分组。
const data = [
{ id: 1, category: 'A' },
{ id: 2, category: 'B' },
{ id: 3, category: 'A' },
{ id: 4, category: 'B' }
];
const groupedData = data.reduce((acc, obj) => {
acc[obj.category] = acc[obj.category] || [];
acc[obj.category].push(obj);
return acc;
}, {});
console.log(groupedData);
// 输出:
// {
// A: [{ id: 1, category: 'A' }, { id: 3, category: 'A' }],
// B: [{ id: 2, category: 'B' }, { id: 4, category: 'B' }]
// }
5、去重: 您可以使用
reduce
来从数组中去除重复项。
const numbers = [1, 2, 2, 3, 4, 4, 5];
const uniqueNumbers = numbers.reduce((acc, current) => {
if (!acc.includes(current)) {
acc.push(current);
}
return acc;
}, []);
console.log(uniqueNumbers); // 输出: [1, 2, 3, 4, 5]
6、 项目实战
const data = [
{
"index": 1,
"name1": "英国",
"name2": "邮编开头",
"name3": "KW15-17/PA34/PA60-61/PA76-78/PH42-44/ZE",
"name4": "39.5",
"name5": "37.5",
"name6": "37.5",
"name7": "37.5"
},
{
"index": 2,
"name1": "意大利/西班牙/匈牙利/罗马尼亚",
"name2": "完整邮编+",
"name3": "45031,45020,100141",
"name4": "19.8",
"name5": "16.8",
"name6": "14.8",
"name7": "14.8"
},
{
"index": 3,
"name1": "法国",
"name2": "国家",
"name3": "",
"name4": "9.6",
"name5": "9.6",
"name6": "9.6",
"name7": "9.5"
},
{
"index": 5,
"name1": "奥地利/瑞典/丹麦/希腊/葡萄牙/立陶宛/卢森堡",
"name2": "完整邮编+",
"name3": "45770,80440,91225,60452,59353"
"name4": "20.1",
"name5": "20.2",
"name6": "65.2",
"name7": "96.2"
}
];
现在需要这样处理数据
1、如果对象中存在name2为完整邮编+,那么把这个对象拷贝一份 然后删除这个对象
2、再然后在这个删除的位置需要插入2个对象 name1 通过/分割
对象一为刚才拷贝的数据,但是对象中的name1为分割的第一项 name2 为'完整邮编'
对象二为刚才拷贝的数据,但是对象中的name1为分割的第二项 name2 为'国家'
// 处理 分区类型 等于完整邮编+ 情况
const processedData = tableData2.reduce((acc, obj) => {
if (obj.name2 === '完整邮编+') {
const copy1 = { ...obj, name1: obj.name1.split('/')[0], name2: '完整邮编' }
const copy2 = { ...obj, name1: obj.name1.split('/')[1], name2: '国家', name3: '' }
acc.push(copy1, copy2)
} else {
acc.push(obj)
}
return acc
}, [])
const resetIndexedData = processedData.map((obj, index) => ({
...obj, index: index + 1
}))
console.log('预览resetIndexedData==>>', resetIndexedData)