Maison > interface Web > js tutoriel > le corps du texte

Introduction à la méthode de clonage de tableaux en JavaScript (avec code)

不言
Libérer: 2019-03-20 10:11:37
avant
2681 Les gens l'ont consulté

Cet article vous présente la méthode de clonage de tableaux en JavaScript (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

js est principalement divisé en deux catégories : type de données de base et type de données de référence

Les types de données de base incluent : nombre, chaîne, non défini, null, boolean, Symbol (nouveau dans es6)
Types de données de référence : objet, tableau, fonction, données, etc.
Remarque : les types de données de base sont placés dans l'espace de pile et sont stockés par valeur et peuvent être lus Récupération et opération directement.
Le type de données de référence est stocké dans le **espace tas** (porte). La valeur de la variable pointe en fait vers l'adresse (clé) de l'espace tas, donc si vous clonez cette variable, elle équivaut à copier la clé.

let arr = [1,2,3,4,5]
let arr1 = arr  // 这一步相当于把arr栈空间的地址赋给了arr1,其实arr和arr1操作的是同一个堆空间的对象
arr1.push(6) // arr1 = [1,2,3,4,5,6]
console.log(arr) //[1,2,3,4,5,6]
Copier après la connexion

Par conséquent, pour copier des types de référence, vous devez copier des objets dans l'espace du tas

Copie superficielle de tableau
1 .Utiliser des tableaux Les méthodes slice et concat renvoient un Caractéristiques du nouveau tableau

let arr = [1,2,3,4,5]
let arr1 = arr.slice() //[1,2,3,4,5]
let arr2 = arr.concat() //[1,2,3,4,5]
Copier après la connexion

Méthode simple et brute - traverse

let arr = [1,2,3,4,5]
let arr2 = []
arr.forEach(item=>{
    arr2.push(item)
    }
)
console.log(arr2)
Copier après la connexion

3.es6. nouvelle méthode - Opérateur d'expansion

let arr = [1,2,3,4,5]
let arr1 = [...arr] //[1,2,3,4,5]
Copier après la connexion

4.es6 nouvelle méthode - Object.assign
let arr = [1,2,3,4,5]
let arr1 = []
Object .assign(arr1,arr)
console.log(arr1) //[1,2,3.4,5]

Si des tableaux et des objets sont imbriqués dans le tableau, copie superficielle copiera uniquement Le tableau ou l'objet est stocké dans l'espace de pile à l'adresse , donc quel que soit le changement de l'objet pointé par cette adresse dans l'ancien et le nouveau tableaux, les deux tableaux changeront . Par conséquent, nous avons besoin d’une copie complète pour copier un tel tableau.

Copie profonde du tableau
1. Traversée ordinaire, copiez le type de référence lors de la traversée vers le type de référence

let arr = [1,2,3,4,5,{name:'bob'},['a','b']]
      function clone (arr) {
        let arr1 = []
        arr.forEach(item=>{
        //如果不是object,将该值插入到新数组
          if(typeof(item) !== 'object') {
            arr1.push(item)
          } else {
          //根据遍历的对象新建一个相同类型的空对象
            let obj = item instanceof Array ? [] : {}
            for(var key in item){
              if(item.hasOwnProperty(key)){
                obj[key] = item[key]
              }
            }
            arr1.push(obj)
          }
        })
        return arr1
      }
      let arr1 = clone(arr)
      arr1[5].name = 'js'
      console.log(arr,'arr',arr1,'arr1')
Copier après la connexion

2. tableaux et objets, mais les fonctions ne peuvent pas être copiées)

let arr = [1,2,3,4,5,{name:'bob'},['a','b']]
let arr1 = JSON.parse(JSON.stringify(arr))
Copier après la connexion

Cet article est terminé ici Pour d'autres contenus passionnants, vous pouvez prêter attention à la colonne Vidéo du didacticiel JavaScript de PHP. Site chinois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!