Common operations of JavaScript array

preface

Array is one of the common data types in JavaScript. I'll make a brief record and summary about its operation methods here.

This paper mainly includes:

  • Create array
  • Determine whether it is an array
  • Class array and array conversion
  • Array de duplication

You can choose to eat according to your own needs.

Create array

Creating an array is a basic skill. Its methods mainly include the following:

const arr = [1,2,3]                   // array literal 
const arr = [,,,]                     // Three element hole array
const arr = new Array(4)              // [,,,,]
const arr = new Array(4,2)            // [4,2]
const arr = Array.of(1,2,3)           // [1,2,3]

Among them, the most commonly used is array literal method.

Determine whether it is an array

The main methods to judge whether it is an array include:

// Method 1
[1,2,3] instanceof Array   
// Method 2
[1,2,3].constructor === Array
// Method 3
Object.prototype.toString.call([1,2,3]) === '[object Array]'
// Method 4
Array.isArray([1,2,3])
// Method 5 (compatible writing)
function isArray(arr){
    return Array.isArray ? 
        Array.isArray(arr):Object.prototype.toString.call(arr) === '[object Array]'
}

Generally, the most commonly used method should be isArray.

Class array and array conversion

The data structure we sometimes encounter is not a pure array, which is generally classified as "class array". Class array can be transformed into a pure array with the following methods:

const x = document.querySelectorAll('a');
// Method 1
Array.prototype.slice.call(x);
// Method 2
Array.from(x);
Array.from(x,mapFn,thisArg);
// Method 3
[...x]
// Method 4
function toArray(x){
    let res = []
    for(item of x){
        res.push(item)
    }
    return res
}
// Method 5
Array.apply(null,x)
// Method 6
[].concat.apply([],x)

Methods 5 and 6 essentially take advantage of the characteristics of apply, that is, the second parameter (array or class array) passed to apply will be converted into a parameter list, and these parameters will be sent to the called method (new Array or concat).

Array de duplication

Array de duplication essentially requires comparing whether two elements are equal. If they are equal, one element will be discarded. For accurate judgment, object is used here Is for comparison.

1) Using set to remove duplication

Set requires no repetition of elements, so you can remove the duplication after converting the array to set, and then convert it back to the array.

function unique(arr){
    return Array.from(new Set(arr))
    // return [...new Set(arr)]
}

2) Double cycle + splice

The outer loop traverses all elements, and the inner loop traverses all elements after the current element. If they are found to be equal, use splice to remove one. Remember to back off one grid at a time in the inner loop, otherwise some elements will be missed

function unique(arr){
    for(let i = 0;i < arr.length;i++){
        for(let j = i + 1;i < arr.length;j++){
            if(Object.is(arr[i],arr[j])){
                arr.splice(j,1)
                j--
            }
        }
    }
    return arr
}

3) New array + includes

Create a new array. Before adding an element to the array, check whether the element already exists in the array:

function unique(arr){
    const res = []
    arr.forEach((item,index) => {
        // You can also if(res.indexOf(item) == -1), but NaN cannot be judged correctly
        if(!res,includes(item)){
            res.push(item)
        }
    })
}

4)reduce + includes

function unique(arr){
    return arr.reduce((acc,cur) => {
        // return acc.includes(cur) ? acc : acc.concat(cur)
        return acc.includes(cur) ? acc : [...acc,cur]
    },[])
}

5) New array + sort

According to the mechanism of sort (call toStrng on each element, and then sort at the string level), the equal elements are gathered together. Create a new array. Before adding an element to the array, check whether the element is equal to the previous element. If yes, it belongs to a duplicate element:

function unique(arr){
    arr.sort()
    const res = [arr[0]]
    for(let i = 1;i < arr.length;i++){
        if(!Object.is(arr[i],arr[i-1])){
            res.push(arr[i])
        }
    }
    return res
}

6) New array + using object attributes

This method is actually the same as "new array + includes". Create a new array. Before adding an element to the array, check whether the element has been used as an attribute of the object:

// The object attribute value can be considered as the number of times the element is repeated
function unique(arr){
    const res = []
    const obj = {}
    arr.forEach((item,index) => {
        if(!obj[item]){
            res.push(item)
            obj[item] = 1
        } else {
            obj[item]++
        }
    })
    return res
}

What is detected here is the attribute name of the object, and the attribute name is essentially a string. Therefore, it will be considered that obj[true] and obj["true"] are equal, resulting in the element true or the element "true" not being put into the new array

7) Using map

It is essentially the same as the above method, but there is no need to create a new array:

function unique(arr){
    let map = new Map()
    for(item of arr){
        if(!map.has(item)){
            map.set(item,true)
        }
    }
    return [...map.keys()]
}

8)filter + indexOf

Get rid of duplicate elements. From another perspective, keep those elements whose index is equal to the index of the first occurrence. Such elements can be filtered out by filter and put into an array:

function unique(arr){
    return arr.filter((item,index) => index === arr.indexOf(item))
}

The disadvantage of using indexOf is that NaN cannot be judged correctly.

summary

The above is a summary of some basic operation methods related to arrays.

~

~End of this article, thank you for reading!

~

Learn interesting knowledge, make interesting friends and shape interesting souls!

Hello, I'm Programming samadhi Hermit Wang, my official account is " Programming samadhi "I hope you can give me more advice!

Added by timgetback on Sun, 06 Feb 2022 03:41:54 +0200