Recommandations d'apprentissage associées : Tutoriel vidéo javascript
Préface
Je voulais faire cette série depuis l'année dernière quand j'ai découvert que la méthode de remplacement des chaînes avait de nombreuses utilisations magiques, mais je n'ai jamais eu le temps et je n'ai pas pensé à un bon nom, alors je l'ai mis en attente. Quand je faisais mes devoirs vendredi dernier, j'ai vu une solution dans les commentaires, qui consiste à utiliser Array.from pour le résoudre en une seule ligne, et c'est assez efficace. J'ai donc lu les documents et les blogs, et après avoir compris, j'ai pensé qu'il était temps de commencer cette série. De plus, les tableaux sont l'une des structures de données les plus couramment utilisées dans notre développement. En tant que méthode de génération de tableaux, il est logique de commencer par. Contentons-nous du nom de la série.
Définition : La méthode from() est utilisée pour passer un objet ou un itérable avec la longueur attribut Objet pour renvoyer un tableau.
Syntaxe : Array.from(object, mapFunction, thisValue)
Paramètres | Description | ||||||||
|
Obligatoire, l'objet à convertir en tableau. | ||||||||
mapFunction |
Facultatif, la fonction à appeler pour chaque élément du tableau. | ||||||||
Facultatif, l'objet this dans la fonction de mappage (mapFunction). |
Exemple d'utilisation
1. 🎜>Array.from('hello') //["h", "e", "l", "l", "o"]
Array.from(new Set(['name','age'])) //["name", "age"]
Array.from({name:'lgc',age:25}) //[]
let map=new Map()
map.set('name','lgc')
map.set('age',25)
Array.from(map) //[["name", "lgc"],["age", 25]]
function test(){
console.log(Array.from(arguments))
}
test(1,2,3) //[1, 2, 3]复制代码
function clone(arr){
return Array.isArray(arr) ? Array.from(arr, clone):arr
}
let arrayA=[[1,2],[3,4]]
let arrayB=clone(arrayA)
arrayA===arrayB //false
arrayA[0]===arrayB[0] //false复制代码
function unique(arr){
return Array.from(new Set(arr))
}复制代码
4. Autres utilisations de from
Regardez à nouveau la définition de from : la méthode from() est utilisée pour passer des objets avec la
longueurattribut ou can Un objet itérable pour renvoyer un tableau. Juste de la longueur ? Essayez-le
Array.from({length:2},(val,index)=>index) //[0,1]复制代码
D'accord, mais à quoi ça sert ? Premièrement, comme le code ci-dessus, vous pouvez facilement générer un tableau
Array.from({length:3},(val,index)=>index*10) //[0,10,20]复制代码
dans une certaine plage et avec certaines règles. Deuxièmement, l'initialisation du tableau. Par exemple, vous souhaitez générer un tableau d'objets d'une longueur spécifiée. Quelle a été votre première réaction ? remplir?
let testArr=Array(3).fill({}) testArr[0]===testArr[1] //true复制代码
Chaque objet ici est en fait le même. Si vous en modifiez un, les autres changeront naturellement en conséquence, mais souvent, ce dont nous avons besoin n'est pas comme ça. let testArrb=Array.from({length:3},()=>({}))
testArrb[0]===testArrb[1] //false复制代码
Le contenu ci-dessus est en fait progressivement conçu pour mieux comprendre les idées de résolution de problèmes suivantes. A
A
Question LeetCode 867 :
Étant donné une matrice
, renvoie la matrice transposée de.
La transposition d'une matrice fait référence au retournement de la diagonale principale de la matrice et à l'échange de l'index de ligne et de l'index de colonne de la matrice.
Exemple 1 : Entrée : [[1,2,3],[4,5,6],[7,8,9]] Sortie : [[1,4,7],[2, 5,8],[3,6,9]] Exemple 2 : Entrée : [[1,2,3],[4,5,6]] Sortie : [[1,4],[2,5], [3,6]]
Ma première réaction a été que ce n'était pas un échange d'indice ? C'est si simple. J'ai donc écrit le code suivant
var transpose = function(A) { let x=A.length let y=A[0].length for(let i=0;i<x;i++){ for(let j=0;j<y;j++){ if(j-i>0){ [A[i][j],A[j][i]]=[A[j][i],A[i][j]] } } } return A };复制代码
Code d'exécution : réussi, soumission : échouée. Bon sang? En regardant le message d'erreur, j'ai constaté que la situation de l'exemple 2, où la "longueur et la largeur" ne sont pas égales, avait été ignorée. Changez votre façon de penser et inversez les cycles internes et externes. Chaque fois que la boucle la plus externe est exécutée, une colonne est traitée comme une ligne. Exécuter, passer.
Cependant, cette version semble trop chère et le temps d'exécution est trop lent. Mais après tout, je l'ai implémenté moi-même, vous pouvez donc vous rendre dans la zone de commentaires pour trouver d'autres idées. Ce qui suit est implémenté par le maître dans la zone de commentaire, mais je ne l'ai pas compris la première fois.
var transpose = function(A) { return Array.from({length:A[0].length},(_v,i)=>A.map(v=>v[i]))};复制代码
{length:A[0].length}, utilise la largeur de la matrice donnée comme longueur de la matrice transposée, afin de satisfaire la condition "d'un objet avec la Si vous souhaitez en savoir plus sur la programmation, faites attention à la rubriqueFormation php !
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!