随着前端技术的不断发展,前端工作需要展示的界面越来越复杂,因此数据处理的场景越来越多。话不多说,上代码。
去重
- indexOf()
思路:新建一个数组,便利传入数组,值不在就push到新数组
缺点:IE8以下不支持indexOf方法。
var arr =[1,2,2,3,5,6,7,7,4,4,6];
function uniq(array){
var temp =[];
for(var i =0;i<array.length;i++){
if(temp.indexOf(array[i] == -1)){
temp.push(array[i])
}
}
return temp;
}
console.log(uniq(arr))
- 排序后相邻去除法
思路:给传入数组排序,排序后相同值相邻,循环遍历,新数组之加入不与前一值重复的值
缺点:会打乱原有数组的顺序
var str = [1,2,'2',2,3,4,6,8,4,9]
function uniq(array){
array.sort()
var temp =[array[0]]
for(var i = 0;i<array.length<i++){
if(array[i] !== temp[temp.length-1]){
temp.push(array[i])
}
}
return temp
}
console.log(uniq(str))
- 数组下标法
思路:使用indexOf,如果当前数组的第i项在当前数组中第一次出现的位置不是i,那么表示第i项是重复的,忽略掉。否则存入新数组
var arr= [1,2,'2',2,3,4,6,8,4,9]
function uniq(array){
var temp =[]
for(var i = 0;i<array.length;i++){
if(temp.indexOf(array[i]) == i){
temp.push(array[i])
}
}
return temp
}
console.log(uniq(arr))
平级数组变成父子级数组
思路:新建数组;遍历数组;每条数据中的和parentId和传入的相同,就去找这个元素的子集,找打元素中parentId==item.id,层层递归。
const dataTree = [
{id: 1, name: '总公司', parentId: 0},
{id: 2, name:'深圳分公司', parentId: 1},
{id: 3, name:'北京分公司', parentId: 1},
{id: 4, name:'研发部门', parentId: 2},
{id: 5, name:'市场部门', parentId: 2},
{id: 6, name:'测试部门', parentId: 2},
{id: 7, name:'财务部门', parentId: 2},
{id: 8, name:'运维部门', parentId: 2},
{id: 9, name:'市场部门', parentId: 3},
{id: 10, name:'财务部门', parentId: 3},
]
function changeData(data,parentId = 0){
let tree = []
dataTree.map(item=>{
if(item.parentId == parentId){
item.children = changeData(data,item.id)
tree.push(item)
}
})
return tree
}
console.log(changeData(dataTree,0))