数组算法
arrayObject.slice(start,end)
根据数组对象中某个值分组
此例中根据 arr 数组中的 menu_group 字段来分组
js
let map = {}
let result = []
arr.forEach(e => {
if (!map[e.menu_group]) {
result.push({
menu_group: e.menu_group,
menus: [e]
})
map[e.menu_group] = e
} else {
result.forEach(a => {
if (a.menu_group == e.menu_group) {
a.menus.push(e)
}
})
}
})
return result递归全排列
- 如果
str的长度为1,例如'a',则排序结果为['a'] - 递归的思路是这样的:比如给
'abc'排序,我们可以不管后面的字符,将其设为preVal,然后只考虑第一个字符'a'怎么插入已经排好序的后面的字符中
TIP
preVal 代表的是后面字符的排序可能,比如给 'abc' 排序的话,preVal 就是 ['bc','cb]
- 例如将
'a'插入到'bc'中是要遍历三次的,所以遍历次数要加一 - 最后利用拼接的方法把
str[0]也就是举例中的'a'插入val中
js
range(str){
if (str.length === 1) {
return [str] //tip1
} else {
let result = [];
let preVal = range(str.slice(1)); //tip2
preVal.forEach(val => {
for (let i = 0; i < val.length + 1; i++) { //tip3
let newStr = val.slice(0, i) + str[0] + val.slice(i); //tip4
result.push(newStr)
}
})
return result
}
}