/**
* 经过函数fun1的处理,过滤掉所有type=t1的节点及其子节点。
* let results = {
* "data":[
* {
* "name":"name1",
* "type":"t1"
* },
* {
* "name":"name2",
* "type":"t2",
* "children":[
* {
* "name":"name3",
* "type":"t4",
* "children":[
* {
* "name":"name3",
* "type":"t5"
* },
* ]
* },
* {
* "name":"name4",
* "type":"t1",
* "children":[
* {
* "name":"n6",
* "type":"t2"
* }
* ]
* }
* ]
* },
* {
* "name":"name5",
* "type":"t3"
* }
* ]
* }
*
* output:[
* {
* "name":"name2",
* "type":"t2",
* "children":[
* {
* "name":"name3",
* "type":"t3"
* }
* ]
* },
* {
* "name":"name5",
* "type":"t3"
* }
* ]
*/
const filterType = (data) => {
const dataList = []
data.forEach(item => {
if (item.children) {
item.children = filterType(item.children)
}
if (item.type !== 't1') dataList.push(item)
})
return dataList
}
console.log(filterType(results.data), 'filterType----')
/**
* 《次数排序》
* 根据数组中数字重复出现的次数从小到大排序
*
* eg1
* input: [1,3,4,4,1,1]
* output: [3,4,4,1,1,1]
*
* eg2
* input: [4, 4, 1, 1, 3, 1, 5, 5, 5, 2, 2, 5, 2, 2]
* output: [3, 4, 4, 1, 1, 1, 2, 2, 2, 2, 5, 5, 5, 5]
*/
function solution(arr) {
let map = new Map()
arr.forEach(item => map.set(item, map.has(item) ? map.get(item) + 1 : 1))
let mapArr = []
map.forEach((value, key) => {
mapArr.push({
value,
key
})
})
mapArr = mapArr.sort((a, b) => a.value - b.value)
const resultArr = []
mapArr.forEach(item => {
for (let i = 0; i < item.value; i++) {
resultArr.push(item.key);
}
})
return resultArr
}
console.log(solution([1,3,4,4,1,1]), '========')
/** 列表转成树形结构
* let arr = [
* { id: '01', name: '张大大', pid: '', job: '项目经理' },
* { id: '02', name: '小亮', pid: '01', job: '产品leader' },
* { id: '03', name: '小美', pid: '01', job: 'UIleader' },
* { id: '04', name: '老马', pid: '01', job: '技术leader' },
* { id: '05', name: '老王', pid: '01', job: '测试leader' },
* { id: '06', name: '老李', pid: '01', job: '运维leader' },
* { id: '07', name: '小丽', pid: '02', job: '产品经理' },
* { id: '08', name: '大光', pid: '02', job: '产品经理' },
* { id: '09', name: '小高', pid: '03', job: 'UI设计师' },
* { id: '10', name: '小刘', pid: '04', job: '前端工程师' },
* { id: '11', name: '小华', pid: '04', job: '后端工程师' },
* { id: '12', name: '小李', pid: '04', job: '后端工程师' },
* { id: '13', name: '小赵', pid: '05', job: '测试工程师' },
* { id: '14', name: '小强', pid: '05', job: '测试工程师' },
* { id: '15', name: '小涛', pid: '06', job: '运维工程师' }
* ]
*/
const get_tree = (arr) => {
const map = {}
const newArr = []
arr.forEach(item => {
map[item.id] = item
})
arr.forEach(i => {
const parent = map[i.pid]
if (parent) {
// parent.children ? parent.children.push(i) : parent.children = []
(parent.children || (parent.children = [])).push(i)
} else {
newArr.push(i)
}
})
return newArr
}
console.log(get_tree(arr), 'get_tree-----')
/**
* 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
* 示例 1:
* 输入: s = "abcabcbb"
* 输出: 3
* 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
* 示例 2:
* 输入: s = "bbbbb"
* 输出: 1
* 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
*/
const lengthOfLongestSubstring = function (str) {
if (!str) return 0;
let left = 0; let right = 1; let max = 1;
// 1 < 5
while (right < str.length) {
// substr = a ab 1
const substr = str.slice(left, right);
// 如果下一个字符在substr已经存在,移动指针,重新寻找子串
// a includes b
if (substr.includes(str[right])) {
left = right;
} else {
max = Math.max(max, substr.length + 1);
}
right++;
}
return max;
};
console.log(lengthOfLongestSubstring("abcabcbb"))