利用 reduce 进行数据优化
数组去重
没错,又是一个老生常谈的问题,数组去重,但是我们这次去除的不仅仅是单个的数据,而是拥有某个相同键值的对象集合。例如下面的例子,我们有以下的数据:
首先我们来看看一个老生常谈的问题,我们假设有这样的一个对象:
const data = [
{
name: "Kris",
age: "24"
},
{
name: "Andy",
age: "25"
},
{
name: "Kitty",
age: "25"
},
{
name: "Andy",
age: "25"
},
{
name: "Kitty",
age: "25"
},
{
name: "Andy",
age: "25"
},
{
name: "Kitty",
age: "25"
}
现在我们要去重里面name
重复的对象,这时候我们可以利用reduce
,例子如下:
const dataReducer = (prev, cur, idx) => {
let obj = {}
const { name } = cur
obj[name] = cur
return {
...prev,
...obj
}
}
const reducedData = data.reduce(dataReducer, {});
let newData = Object.values(reducedData);
复制代码
批量生成对象元素
在实际业务中,有一个操作是需要对类似以下的对象进行操作的:
{
a1: 'data',
a2: 'data',
...,
an: 'data'
}
复制代码
像我这么懒的,肯定不会一个个手写,所以就有了以下方法
const createList = (item, idx) => {
let obj = {}
obj[`a{idx}`] = "data"
return obj
}
const listReducer = (acc, cur) => (!acc ? { ...cur } : { ...cur, ...acc })
const obj = Array.from(new Array(20), createList).reduce(listReducer)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。