1. 嵌套数组打平并且去重
var arr = [3,2,4,5,6,1,5,4,[9,5,3,2,[10,4,6]]]; var obj = {};//去重标识 function test(data) { var newArr = []; for ( var i in data) { if (data[i] instanceof Array) { return [].concat(newArr,test(data[i])); }else{ if(!obj[data[i]]) { obj[data[i]] = true; newArr.push(data[i]); } } } return newArr; } var data = test(arr); console.log(data)//[3, 2, 4, 5, 6, 1, 9, 10]
2.冒泡排序, 冒泡排序算法就是依次比较大小,小的大的进行位置上的交换。
var arr = [10,20,9,7,30,1,5]; for (var i in arr) { for (var j in arr) { if (arr[i] > arr[j]){ var num = arr[i]; arr[i] = arr[j]; arr[j] = num; } } } console.log(arr);//[30, 20, 10, 9, 7, 5, 1]
3.快速排序,算法参考某个元素值,将小于它的值,放到左数组中,大于它的值的元素就放到右数组中,然后递归进行上一次左右数组的操作,返回合并的数组就是已经排好顺序的数组了。
var arr = [10,20,9,7,30,1,5]; function fun(data) { var len = data.length; if (len <= 1) { return data; } var num = data[0];//参考元素 var left = []; var right = []; for( var i = 1; i < len; i++) { if (data[i] < num ) { left.push(data[i]); }else{ right.push(data[i]); } } return [].concat(fun(left), [num], fun(right)); } console.log(fun(arr)); //[1, 5, 7, 9, 10, 20, 30]
4. 树形结构数据,根据子级数据的 某个字段,来获取所有的父级
例如:antd 的 联级选择插件,回显数据,需要从上到下的每一级数据的id, 然后存数据库的,可能只有一个id, 不是一个数组,这个时候我们需要拿到这个id, 倒推所有父级的id
getInitMenuActive = (id) => { const { list } = this.props; function fn(data, val) { for (let i = 0; i < data.length; i++) { if (data[i] && data[i].id === val) { return [data[i].id]; } else if (data[i] && data[i].children && data[i].children.length > 0) { let ids = fn(data[i].children, val); if (ids) { return ids.concat(data[i].id); } } } } let list = fn(list, id); return list ? list : []; }