Skip to content

数组方法

arrayEach()

arrayEach (obj, iterate [, context]) 数组迭代器

                mmqUtils.arrayEach([11, 22, 33], (item, key) => {
                  // 数组迭代器,只能用于遍历(数组或伪数组),性能高于 each
                })

lastArrayEach()

lastArrayEach (obj, iterate [, context]) 数组迭代器,从最后开始迭代

                mmqUtils.lastArrayEach([11, 22, 33], (item, key) => {
                  // 数组迭代器,只能用于遍历(数组或伪数组),性能高于 lastEach
                })

arrayIndexOf()

arrayIndexOf (obj, val) 返回数组第一个索引值,比 indexOf 快

                mmqUtils.arrayIndexOf([11, 22, 33, 22], 55) // -1
                mmqUtils.arrayIndexOf([11, 22, 33, 22], 22) // 1

lastIndexOf()

lastIndexOf (obj, val) 从最后开始的索引值,返回对象第一个索引值

                mmqUtils.lastIndexOf([11, 22, 33, 22], 55) // -1
                mmqUtils.lastIndexOf([11, 22, 33, 22], 22) // 3

includeArrays()

includeArrays (array1, array2) 判断数组是否包含另一数组

                mmqUtils.includeArrays([11, 22, 33], []) // true
                mmqUtils.includeArrays([11, 22, 33], [11]) // true
                mmqUtils.includeArrays([11, 22, 33], [22, 33]) // true
                mmqUtils.includeArrays([11, 22, 33], [22, 44]) // false

remove()

remove (obj, iterate) 移除对象属性

                let list1 = [11, 22, 33, 44]
                mmqUtils.remove(list1, 2) // list1 = [11, 22, 44]
                let list2 = [11, 22, 33, 44]
                mmqUtils.remove(list2, item => item === 22) // list2 = [11, 33, 44]

shuffle()

shuffle (array) 将一个数组随机打乱,返回一个新的数组

                mmqUtils.shuffle([11, 22, 33, 44, 55]) // [22, 33, 55, 11, 44]

sample()

sample (array, number) 从一个数组中随机返回几个元素

                mmqUtils.sample([11, 22, 33, 44, 55], 3) // [22, 33, 55]

iterate()

sum (obj, iterate) 求和函数,将数值相加

                mmqUtils.sum([22, 66, 88]) // 176
                mmqUtils.sum([{value: 11}, {value: 22}, {value: 66}], 'value') // 99
                mmqUtils.sum({val1: 21, val2: 34, val3: 47}) // 102

toArray()

toArray (array) 将对象或者伪数组转为新数组

                mmqUtils.toArray({name: 'test1', age: 25}) // ['test1', 25]
                mmqUtils.toArray(arguments) // [...]
                mmqUtils.toArray(document.querySelectorAll('div')) // [...]

uniq()

uniq (array) 数组去重

                mmqUtils.uniq([11, 22, 33, 33, 22, 55]) // [11, 22, 33, 55]

flat()

flat (array) 数组去重

                mmqUtils.flat([[1, 2, 3], [4, 5, 6], [7, 8]])  // [1, 2, 3, 4, 5, 6, 7, 8]

toArrayTree()

toArrayTree (array, options) 一个高性能的树结构转换函数,将一个带层级的数据列表转成树结构

属性描述默认值
strict是否严格模式,会去掉父子关联不存在数据,当子节点为空时将没有 children 属性false
key节点键值id
parentKey父节点键值parentId
children节点属性children
mapChildren子节点映射属性
data数据存放属性null
    const list1 = [
      { id: 1, name: '111' },
      { id: 2, parentId: 1, name: '222' },
      { id: 3, name: '333' },
      { id: 4, parentId: 2, name: '444' }
    ]
    expect(
      mmqUtils.toArrayTree(list1)
    ).toEqual([
      {
        id: 1,
        name: '111',
        children: [
          {
            id: 2,
            parentId: 1,
            name: '222',
            children: [
              {
                id: 4,
                parentId: 2,
                name: '444',
                children: []
              }
            ]
          }
        ]
      },
      {
        id: 3,
        name: '333',
        children: []
      }
    ])
    const list4 = [
      { id: 1, name: '111' },
      { id: 2, parentId: 1, name: '222' },
      { id: 3, name: '333' },
      { id: 4, parentId: 2, name: '444' },
      { id: 5, parentId: 22, name: '555' }
    ]
    expect(
      mmqUtils.toArrayTree(list4, { strict: true, parentKey: 'parentId', key: 'id', children: 'children', data: 'data' })
    ).toEqual([
      {
        data: { id: 1, name: '111' },
        id: 1,
        children: [
          {
            data: { id: 2, parentId: 1, name: '222' },
            id: 2,
            parentId: 1,
            children: [
              {
                data: { id: 4, parentId: 2, name: '444' },
                id: 4,
                parentId: 2,
                children: []
              }
            ]
          }
        ]
      },
      {
        data: { id: 3, name: '333' },
        id: 3,
        children: []
      }
    ])

toTreeArray()

toTreeArray (array, options) 将一个树结构转成数组列表

属性描述默认值
children节点属性children
data数据存放属性null
clear同时移除子节点属性false
      const list1 = [
      {
        id: 1,
        name: '111',
        children: [
          {
            id: 2,
            parentId: 1,
            name: '222',
            children: [
              {
                id: 4,
                parentId: 2,
                name: '444',
                children: []
              }
            ]
          }
        ]
      },
      {
        id: 3,
        name: '333',
        children: []
      }
    ]
    expect(
      mmqUtils.toTreeArray(list1)
    ).toEqual([
      list1[0],
      list1[0].children[0],
      list1[0].children[0].children[0],
      list1[1]
    ])
    const list2 = [
      {
        data: { id: 1, name: '111' },
        id: 1,
        children: [
          {
            data: { id: 2, parentId: 1, name: '222' },
            id: 2,
            parentId: 1,
            children: [
              {
                data: { id: 4, parentId: 2, name: '444' },
                id: 4,
                parentId: 2,
                children: []
              }
            ]
          }
        ]
      },
      {
        data: { id: 3, name: '333' },
        id: 3,
        children: []
      },
      {
        data: { id: 5, parentId: 22, name: '555' },
        id: 5,
        parentId: 22,
        children: []
      }
    ]
    expect(
      mmqUtils.toTreeArray(list2, { data: 'data' })
    ).toEqual([
      { id: 1, name: '111' },
      { id: 2, parentId: 1, name: '222' },
      { id: 4, parentId: 2, name: '444' },
      { id: 3, name: '333' },
      { id: 5, parentId: 22, name: '555' }
    ])
    const list3 = [
      {
        id: 1,
        name: '111',
        children: [
          {
            id: 2,
            parentId: 1,
            name: '222',
            children: [
              {
                id: 4,
                parentId: 2,
                name: '444',
                children: []
              }
            ]
          }
        ]
      },
      {
        id: 3,
        name: '333',
        children: []
      }
    ]
    expect(
      mmqUtils.toTreeArray(list3, { clear: true })
    ).toEqual([
      {
        id: 1,
        name: '111'
      },
      {
        id: 2,
        parentId: 1,
        name: '222'
      },
      {
        id: 4,
        parentId: 2,
        name: '444'
      },
      {
        id: 3,
        name: '333'
      }
    ])

eachTree()

eachTree (obj, iterate, [options]) 从树结构中遍历数据

属性描述默认值
children节点属性children
    let rest: any[] = []
    mmqUtils.eachTree(null, (item: any) => {
      rest.push(item)
    })
    expect(rest).toEqual([])
    rest = []
    mmqUtils.eachTree([{ a: 11 }, { a: 22 }], (item: any) => {
      rest.push(item)
    })
    expect(rest).toEqual([{ a: 11 }, { a: 22 }])
    rest = []
    mmqUtils.eachTree([{ a: 11 }, { a: 22, children: [{ a: 222 }, { a: 223 }] }], (item: any) => {
      rest.push(item)
    })
    expect(rest).toEqual([{ a: 11 }, { a: 22, children: [{ a: 222 }, { a: 223 }] }, { a: 222 }, { a: 223 }])
    rest = []
    mmqUtils.eachTree([{ a: 11 }, { a: 22, childs: [{ a: 222 }, { a: 223 }] }], (item: any) => {
      rest.push(item)
    }, { children: 'childs' })
    expect(rest).toEqual([{ a: 11 }, { a: 22, childs: [{ a: 222 }, { a: 223 }] }, { a: 222 }, { a: 223 }])

filterTree()

filterTree (obj, iterate, [options]) 从树结构中根据回调过滤数据

属性描述默认值
children节点属性children
    expect(
      mmqUtils.filterTree(null, (item: any) => {
        return item.a === 33
      })
    ).toEqual([])
    expect(
      mmqUtils.filterTree([{ a: 11 }, { a: 22 }], (item: any) => {
        return item.a === 33
      })
    ).toEqual([])
    expect(
      mmqUtils.filterTree([{ a: 11 }, { a: 22 }], (item: any) => {
        return item.a === 11
      })
    ).toEqual([{ a: 11 }])
    expect(
      mmqUtils.filterTree([{ a: 11 }, { a: 22, children: [{ a: 222 }, { a: 223 }] }], (item: any) => {
        return item.a >= 22
      })
    ).toEqual([{ a: 22, children: [{ a: 222 }, { a: 223 }] }, { a: 222 }, { a: 223 }])
    expect(
      mmqUtils.filterTree([{ a: 11 }, { a: 22, childs: [{ a: 222 }, { a: 223 }] }], (item: any) => {
        return item.a >= 22
      }, { children: 'childs' })
    ).toEqual([{ a: 22, childs: [{ a: 222 }, { a: 223 }] }, { a: 222 }, { a: 223 }])

searchTree()

searchTree (obj, iterate, [options]) 从树结构中根据回调查找数据

属性描述默认值
children节点属性children
mapChildren将子节点映射到指定的属性
    expect(
      mmqUtils.searchTree(null, (item: any) => item.a === 33)
    ).toEqual([])
    expect(
      mmqUtils.searchTree([{ a: 11 }, { a: 22 }], (item: any) => item.a === 33)
    ).toEqual([])
    expect(
      mmqUtils.searchTree([{ a: 11 }, { a: 22 }], (item: any) => item.a === 11)
    ).toEqual([{ a: 11, children: [] }])
    expect(
      mmqUtils.searchTree([{ id: 1 }, { id: 2, children: [{ id: 0 }] }, { id: 3, children: [{ id: 30 }] }], (item: any) => item.id > 1)
    ).toEqual([{ id: 2, children: [{ id: 0, children: [] }] }, { id: 3, children: [{ id: 30, children: [] }] }])
    expect(
      mmqUtils.searchTree([{ id: 1 }, { id: 2, childs: [{ id: 0 }] }, { id: 3, childs: [{ id: 30 }] }], (item: any) => item.id >= 2, { children: 'childs' })
    ).toEqual([{ id: 2, childs: [{ id: 0, childs: [] }] }, { id: 3, childs: [{ id: 30, childs: [] }] }])

mapTree()

mapTree (obj, iterate[, options]) 从树结构中指定方法后的返回值组成的新数组

属性描述默认值
children节点属性children
mapChildren将子节点映射到指定的属性
    expect(
      mmqUtils.mapTree(null, (item: any) => {
        return item.a * 2
      })
    ).toEqual([])
    expect(
      mmqUtils.mapTree([{ a: 11 }, { a: 22 }], (item: any) => {
        return item.a * 2
      })
    ).toEqual([22, 44])
    expect(
      mmqUtils.mapTree([{ a: 11 }, { a: 22 }], (item: any) => {
        return { a: item.a * 2 }
      })
    ).toEqual([{ a: 22 }, { a: 44 }])
    expect(
      mmqUtils.mapTree([{ a: 11 }, { a: 22, children: [{ a: 222 }, { a: 223 }] }], (item: any) => {
        return { a: item.a * 2 }
      })
    ).toEqual([{ a: 22 }, { a: 44, children: [{ a: 444 }, { a: 446 }] }])
    expect(
      mmqUtils.mapTree([{ a: 11 }, { a: 22, childs: [{ a: 222 }, { a: 223 }] }], (item: any) => {
        return { a: item.a * 2 }
      }, { children: 'childs' })
    ).toEqual([{ a: 22 }, { a: 44, childs: [{ a: 444 }, { a: 446 }] }])
    expect(
      mmqUtils.mapTree([{ a: 11 }, { a: 22, childs: [{ a: 222 }, { a: 223 }] }], (item: any) => {
        return { a: item.a * 2 }
      }, { children: 'childs', mapChildren: 'childs2' })
    ).toEqual([{ a: 22 }, { a: 44, childs2: [{ a: 444 }, { a: 446 }] }])

Released under the MIT License.