Pourquoi épissures renvoie une chaîne au lieu d'un tableau?
-
27-10-2019 - |
Question
Je suis en train de tableau de jonction deux à partir du tableau à deux dimensions arr .
var one = ["a","b"];
var two = ["c","d"];
var thr = ["e","f"];
var arr = [one,two,thr];
Voici mes deux tentatives infructueuses:
1)
var rem = arr.splice(1,1);
alert(rem[0]);
// This alerts the entire array as one long string "c,d".
// The expected behavior is "c" (index 0 of the returned array _rem_).
2)
var rem = arr[1].splice(0);
alert(arr);
// The array _rem_ is now correct, but _arr_ is left with an empty index: "a,b,,e,f".
J'ai un moins de solution idéale, mais je suis l'espoir d'y arriver avec une fonction.
var test = arr[1].slice(0);
arr.splice(1,1);
La solution
observation intéressante. De l'ECMA-caractéristiques (262, ed 5.):
Lorsque la méthode de jonction est appelée avec deux ou plusieurs arguments commencent, deleteCount et (éventuellement) item1, item2, etc., les éléments de deleteCount de la matrice à partir de l'index de tableau début sont remplacés par les arguments article1, article2, etc. Un objet Array contenant les éléments supprimés (si tout) est retourné .
Array.splice
donc des rendements un tableau des éléments supprimés . Donc, si vous souhaitez référencer le tableau supprimé, cela devrait être la syntaxe:
var rem = arr.splice(1,1)[0];
alert(rem[0]); //=> 'c'
Autres conseils
Vous semblez confus, peut-être par ce qui se passe lorsque vous passez un tableau à alert()
. D'après ce que je peux dire ce que vous voulez, votre premier exemple est correct. Avant de faire une épissure, ce que vous avez dans votre variable arr
est
[
["a", "b"],
["c", "d"],
["e", "f"]
]
Après avoir appelé var rem = arr.splice(1, 1)
, qui supprime un élément de arr
à l'index 1 et le stocke dans un tableau à rem
variable ce que vous avez est
arr
:
[
["a", "b"],
["e", "f"]
]
rem
:
[
["c", "d"]
]
rem[0]
est le ["c", "d"]
de tableau, ce qui est ce que je croyais que tu voulais.
Je pense que son travail comme prévu méthode splice renvoie toujours un tableau.
quand vous dites arr [1] .splice (0); sa vocation Spilce sur un seul et donne [ 'a']
Et quand vous arr.splice (1,1); il retournera [un]