статьи о массивах js

1. Чанк преобразует двумерные массивы
Разбивает массив (массив) на несколько массивов и формирует новый массив из этих разделенных нескольких массивов.

function chunk(array, count = 1) {
    
    
    let pages = []
    array.forEach((item, index) => {
    
    
        const page = Math.floor(index / count)
        if (!pages[page]) pages[page] = []
        pages[page].push(item)
    })
    return pages
}
//列子
chunk([1, 2, 3, 4, 5, 6, 7], 2)
=> [[1, 2], [3, 4], [5, 6], [7]]

chunk(['a', 'b', 'c', 'd'], 3)
=> [['a', 'b', 'c'], ['d']]

2.cloneArray клонирует массив.
Неглубокое копирование копии массива.

// ES6 ...
const cloneArray = arr => [...arr]

// ES6 Array.from
const cloneArray = arr => Array.from(arr)

// concat()
const cloneArray = arr => [].concat(arr)

// map()
const cloneArray = arr => arr.map(x => x)

cloneArray([1, 24]) // [1, 24]
//列子
cloneArray([1, 24])
// => [1, 24]

3.compact удаляет недопустимые значения в массиве.
Создайте новый массив, содержащий все неложные элементы значения в исходном массиве. Например, false, null, 0, "", undefined и NaN считаются "ложными значениями".

const compact = arr => arr.filter(Boolean)
//列子
min([0, 1, false, 2, '', 3])
// => [1, 2, 3]

4.Разница массива различий
создает массив с уникальными значениями массива, каждое значение не включено в другие заданные массивы.
Предполагая, что есть два массива A и B, коллекции в возвращаемом массиве A не включают коллекции в массиве B.

const difference = (a, b) => {
    
    
  const s = new Set(b)
  let arr = a.filter(x => !s.has(x))
  return arr
}
//雷子
difference([1, 2, 6, 7], [1, 2, 9, 5])
// => [ 6, 7 ]

5. Коллекция массивов пересечений
Создайте массив значений общего массива, каждое значение содержится в других заданных массивах.

const intersection = (a, b) => {
    
    
    const s = new Set(b)
    return a.filter(x => s.has(x))
}
// ES6 includes
const intersection = (arr, values) => arr.filter(v => values.includes(v))
//列子
intersection([1, 2, 6, 7], [1, 2, 9, 5])
// => [ 1, 2 ]

6. flatten flatten the array
Разделить многослойный вложенный массив (массив) на массив.

// 扁平化  Map 方法
const flatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? flatten(v) : v)))

// 扁平化  reduce 方法
const flatten = arr => arr.reduce((a, c) => a.concat(Array.isArray(c) ? flatten(c) : c), [])
//列子
flatten([1, [2], [3], [4, 5]])

=> [1, 2, 3, 4, 5]

7. flattenDeep задает уровень выравнивания массива
Разбивает многоуровневый вложенный массив (массив) на заданный уровень массива.

const flattenDeep = (arr, depth = 1) => arr.reduce((a, v) => a.concat(depth > 1 && Array.isArray(v) ? flatten(v, depth - 1) : v), [])

// ES6方法 `flat(depth)`
[1, [2, [3, [4]], 5]].flat(1)
// => [1, 2, [3, [4]], 5]
//列子
flattenDeep([1, [2, [3, [4]], 5]], 1)
// => [1, 2, [3, [4]], 5]

8.isArrayEqual проверяет, равны ли элементы в двух массивах
Сравните, равны ли значения в двух массивах, и возвращайте логическое значение.

const isArrayEqual = (a, b, has = true) => {
    
    
  if (a.length !== b.length) return (has = false)
  const s = new Set(b)
  if (a.find(x => !s.has(x))) return (has = false)
  return has
}
//列子
isArrayEqual([6, 5, 2, 4, 1, 3], [1, 2, 3, 4, 5, 6])
// => true

isArrayEqual([6, 5, 2, 7, 1, 3], [1, 2, 3, 4, 5, 6])
// => false

9. Максимальное значение в максимальном массиве
Отфильтруйте все неложные элементы значения в исходном массиве и верните максимальное значение в массиве.

const max = arr => Math.max(...arr.filter(v => Boolean(v) || v === 0))
//列子
max([0, -1, -2, -3, false])
// => 0

10. Минимальное значение в массиве min.
Отфильтровать все неложные элементы значения в исходном массиве и вернуть минимальное значение в массиве.

const min = arr => Math.min(...arr.filter(v => Boolean(v) || v === 0))
//列子
min([0, -1, -2, -3, false])
// => -3

11. Перетасовка скремблирует массив
Создайте скремблированный массив и используйте алгоритм Фишера-Йейтса для скремблирования элементов массива.

const shuffle = ([...arr]) => {
    
    
    let m = arr.length
    while (m) {
    
    
        const i = Math.floor(Math.random() * m--);
        [arr[m], arr[i]] = [arr[i], arr[m]]
    }
    return arr
}
//列子
shuffle([2, 3, 1])
// => [3, 1, 2]

12. Метод сортировки по возрастанию массива sortAsc
() изменит исходный массив, по умолчанию он расположен в порядке кода Unicode.

// 通过ES6 ...展开运算符浅拷贝一份新数组
const sortAsc = arr => [...arr].sort((a, b) => a - b)
//列子
sortAsc([3, 2, 3, 4, 1])
// => [ 1, 2, 3, 3, 4 ]

13. sortDesc массив в порядке убывания
Возвращает новый массив в порядке убывания.

const sortDesc = arr => [...arr].sort((a, b) => b - a)
//列子
sortDesc([3, 2, 3, 4, 1])
// => [ 1, 2, 3, 3, 4 ]

14.take перехватывает указанный элемент в начале массива.
Извлекает n элементов из первого элемента массива.

const take = (arr, n = 1) => arr.slice(0, n)
//列子
take([2, 3, 1], 2)
// => [2, 3]

15.takeLast перехватывает конечный элемент массива
и извлекает n элементов из последнего элемента массива массива

const takeLast = (arr, n = 1) => arr.slice(0, -n)
//列子
take([2, 3, 1], 2)
// => [3, 1]

16. treeData генерирует данные древовидной структуры.
Эта функция передает массив, каждый идентификатор элемента соответствует своим родительским данным parent_id и возвращает массив древовидной структуры.

const treeData = (arr, id = null, link = 'parent_id') => arr.filter(item => item[link] === id).map(item => ({
    
     ...item, children: treeData(arr, item.id) }))
参数
array 要生成树结构的数组
id 自定义属性名
parent_id 父级自定义属性名
//列子
const comments = [
  {
    
     id: 1, parent_id: null },
  {
    
     id: 2, parent_id: 1 },
  {
    
     id: 3, parent_id: 1 },
  {
    
     id: 4, parent_id: 2 },
  {
    
     id: 5, parent_id: 4 },
]

treeData(comments)

// => [ { id: 1, parent_id: null, children: [ [Object], [Object] ] } ]

17. Уникальная дедупликация массива
Создайте дедуплицированную копию массива массива.

const unique = (...arr) => [...new Set(arr)]

// const unique = (...arr) => Array.from(new Set(arr))
//列子
unique([1, 2, 2, 3, 4, 4, 5])
// => [ 1, 2, 3, 4, 5 ]

18. Дедупликация объекта массива uniqueBy
Создать копию объекта массива массива после дедупликации.

const uniqueBy = (arr, key) => {
    
    
    return arr.reduce((acc, cur) => {
    
    
        const ids = acc.map(item => item[key])
        return ids.includes(cur[key]) ? acc : [...acc, cur]
    }, [])
}
参数
array 要去重的数组
key 要去重的对象属性值
//列子
const responseList = [
    {
    
     id: 1, a: 1 },
    {
    
     id: 2, a: 2 },
    {
    
     id: 3, a: 3 },
    {
    
     id: 1, a: 4 },
    {
    
     id: 2, a: 2 },
    {
    
     id: 3, a: 3 },
    {
    
     id: 1, a: 4 },
    {
    
     id: 2, a: 2 },
    {
    
     id: 3, a: 3 },
    {
    
     id: 1, a: 4 },
    {
    
     id: 2, a: 2 },
    {
    
     id: 3, a: 3 },
    {
    
     id: 1, a: 4 },
]

uniqueBy(responseList, 'id')

// => [ { id: 1, a: 1 }, { id: 2, a: 2 }, { id: 3, a: 3 } ]

おすすめ

転載: blog.csdn.net/weixin_41688609/article/details/125145932
おすすめ