数组数据的处理
1. 对象数组的去重
对象数组中某个属性相同的元素进行去重
2. 对象数组的合并
在某些情况下,我们需要将数组中某个属性相同的元素进行合并处理,而不仅仅是去重。
如下,
let newArr = []
for (let i = 0; i < originArr.length; i++) {
let flag = false
for (let j = 0; j < newArr.length; j++) {
if (newArr[j].label === originArr[i].label) {
newArr[j].children.push(...originArr[i].children)
flag = true
break
}
}
if (!flag) {
newArr.push(originArr[i])
}
}
对象数据的处理
1. 根据条件筛选对象的属性
/**
* originObj 是需要筛选的源对象
* judgeFn 是筛选的判断逻辑
*/
function filterData(originObj, judgeFn) {
const targetObj = {}
for (const key in originObj) {
const val = originObj[key]
if (judgeFn(key, val)) {
targetObj[key] = val
}
}
return targetObj
}
1.1 根据对象的属性名筛选
/**
* originObj, 需要筛选的源对象
* keys, 需要筛选的属性名,可传入字符串或数组
* isDelete, 判断是根据 keys 筛选出属性还是筛选掉属性,boolean 类型
*/
function filterByKeys(originObj, keys, isDelete) {
return filterData(originObj, (key) => {
if (!(keys instanceof Array)) {
keys = [keys]
}
// 根据 keys 筛选符合的属性
if (!isDelete) {
if (keys.includes(key)) {
return true
}
} else {
// 根据 keys 筛选不符合的属性
if (!keys.includes(key)) {
return true
}
}
})
}
1.2 根据对象的属性值来筛选
/**
* originObj, 需要筛选的源对象
* values, 需要筛选的属性值,可传入字符串或数组
* isDelete, 判断是根据 values 筛选出属性还是筛选掉属性,boolean 类型
*/
function filterByValues(originObj, values, isDelete) {
return filterData(originObj, (key, val) => {
if (!(values instanceof Array)) {
values = [values]
}
// 根据 values 筛选符合的属性
if (!isDelete) {
if (values.includes(val)) {
return true
}
} else {
// 根据 values 筛选不符合的属性
if (!values.includes(val)) {
return true
}
}
})
}