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]
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]
Méthode simple et brute - traverse
let arr = [1,2,3,4,5] let arr2 = [] arr.forEach(item=>{ arr2.push(item) } ) console.log(arr2)
3.es6. nouvelle méthode - Opérateur d'expansion
let arr = [1,2,3,4,5] let arr1 = [...arr] //[1,2,3,4,5]
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')
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))
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!