Skip to content

数组算法

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

递归全排列

  1. 如果 str 的长度为1,例如 'a' ,则排序结果为 ['a']
  2. 递归的思路是这样的:比如给 'abc' 排序,我们可以不管后面的字符,将其设为 preVal ,然后只考虑第一个字符 'a' 怎么插入已经排好序的后面的字符中

TIP

preVal 代表的是后面字符的排序可能,比如给 'abc' 排序的话,preVal 就是 ['bc','cb]

  1. 例如将 'a' 插入到 'bc' 中是要遍历三次的,所以遍历次数要加一
  2. 最后利用拼接的方法把 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
    }
}