Quiero convertir la siguiente cadena '14 2'
en una matriz de dos enteros. ¿Cómo puedo hacerlo?convertir cadena en matriz de enteros
Respuesta
Puede .split()
para obtener una matriz de cadenas, a continuación, recorrer a convertirlos en números, así:
var myArray = "14 2".split(" ");
for(var i=0; i<myArray.length; i++) { myArray[i] = +myArray[i]; }
//use myArray, it's an array of numbers
El +myArray[i]
es sólo una forma rápida de hacer la conversión de números, si está seguro de que son enteros, puede hacerlo:
for(var i=0; i<myArray.length; i++) { myArray[i] = parseInt(myArray[i], 10); }
nosotros el split function:
var splitresult = "14 2".split(" ");
Esto consigue una matriz de cadenas, no números. –
Ouups, sí, leyeron mal eso. Vea la respuesta de Marcus Whybrow o Nick Craver para el resto, entonces. – pyvi
En primer lugar dividir la cadena de espacios:
var result = '14 2'.split(' ');
luego convertir la matriz resultado de cadenas en números enteros:
for (var i in result) {
result[i] = parseInt(result[i], 10);
}
Siempre debe pasar un argumento radix a 'parseInt()', de lo contrario, puede obtener octals allí. –
Si las cadenas no comienzan con '0', o' 0x', debería estar bien. –
** Si ** no lo hacen (¿ves cómo prefijiste eso con una suposición?) ... ¿por qué agregar los 3 caracteres necesarios para hacerlo correcto en todos esos casos también? –
var result = "14 2".split(" ").map(function(x){return parseInt(x)});
No todos los navegadores admiten esto - se romperá en IE, esta es una función de JavaScript 1.6+. Además, dije en otra respuesta, siempre pase una raíz a 'parseInt()'. –
Espero con ansias cuando podemos usar '.map' y similar en JS en cualquier navegador sin bibliotecas adicionales. – JAL
si jQuery está disponible, consulte [$ .map] (http://api.jquery.com/jquery.map/) – JoshuaDavid
Sólo por diversión que pensé en tirar una solución forEach(f())
en también.
var a=[];
"14 2".split(" ").forEach(function(e){a.push(parseInt(e,10))});
// a = [14,2]
SO ... hilo mayores, lo sé, pero ...
EDITAR
@RoccoMusolino tenía una buena atrapada; aquí está una alternativa:
TL; DR:
const intArray = [...("5 6 7 69 foo 0".split(' ').filter(i => /\d/g.test(i)))]
MAL: "5 6 note this foo".split(" ").map(Number).filter(Boolean); // [5, 6]
Hay un defecto sutil en las soluciones más elegantes enumerados aquí, específicamente @amillara y @Marcus 'por lo demás hermosas respuestas.
El problema se produce cuando un elemento de la matriz de cadenas no es como un entero, tal vez en un caso sin validación en una entrada. Para un ejemplo artificioso ...
El problema:
var effedIntArray = "5 6 7 69 foo".split(' ').map(Number); // [5, 6, 7, 69, NaN]
Puesto que usted desea obviamente una matriz int PURE, eso es un problema. Honestamente, no capté esto hasta que copie el código SO en mi script ...:/
El(ligeramente menos Baller)solución:
var intArray = "5 6 7 69 foo".split(" ").map(Number).filter(Boolean); // [5, 6, 7, 69]
Así que, ahora, incluso cuando se tiene cadena int basura, su salida es una pura matriz de enteros Los otros son realmente sexys en la mayoría de los casos, pero yo realmente quería ofrecer mi rambla w'actualmente. Sin embargo, todavía es un trazador de líneas, a mi crédito ...
¡Espero que le ahorre tiempo a alguien!
El punto en contra parseInt
-enfoque:
No hay necesidad de usar lambdas y/o dar radix
parámetro para parseInt
, sólo tiene que utilizar parseFloat
o Number
lugar.
Razones:
Está funcionando:
var src = "1,2,5,4,3"; var ids = src.split(',').map(parseFloat); // [1, 2, 5, 4, 3] var obj = {1: ..., 3: ..., 4: ..., 7: ...}; var keys= Object.keys(obj); // ["1", "3", "4", "7"] var ids = keys.map(parseFloat); // [1, 3, 4, 7] var arr = ["1", 5, "7", 11]; var ints= arr.map(parseFloat); // [1, 5, 7, 11] ints[1] === "5" // false ints[1] === 5 // true ints[2] === "7" // false ints[2] === 7 // true
Es más corto.
Es una pequeña mas deprisa y poco se aprovecha de caché, cuando
parseInt
-enfoque - No:// execution time measure function // keep it simple, yeah? > var f = (function (arr, c, n, m) { var i,t,m,s=n(); for(i=0;i++<c;)t=arr.map(m); return n()-s }).bind(null, "2,4,6,8,0,9,7,5,3,1".split(','), 1000000, Date.now); > f(Number) // first launch, just warming-up cache > 3971 // nice =) > f(Number) > 3964 // still the same > f(function(e){return+e}) > 5132 // yup, just little bit slower > f(function(e){return+e}) > 5112 // second run... and ok. > f(parseFloat) > 3727 // little bit quicker than .map(Number) > f(parseFloat) > 3737 // all ok > f(function(e){return parseInt(e,10)}) > 21852 // awww, how adorable... > f(function(e){return parseInt(e)}) > 22928 // maybe, without '10'?.. nope. > f(function(e){return parseInt(e)}) > 22769 // second run... and nothing changes. > f(Number) > 3873 // and again > f(parseFloat) > 3583 // and again > f(function(e){return+e}) > 4967 // and again > f(function(e){return parseInt(e,10)}) > 21649 // dammit 'parseInt'! >_<
Aviso: En Firefox parseInt
trabaja aproximadamente 4 veces más rápido, pero aún más lento que otros. En total: +e
< Number
< parseFloat
< parseInt
Una alternativa a la respuesta Tushar Gupta sería:
'14 2'.split(' ').map(x=>+x);
// [14, 2]`
en campo de código que guardar el 1 carácter. Aquí el operador "+" es "unario más", funciona como parseInt.
let idsArray = ids.split(',').map((x) => parseInt(x));
Si bien este código puede responder a la pregunta, proporciona información adicional el contexto sobre cómo y/o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta. – Badacadabra
mejor solución de una línea:
var answerInt = [];
var answerString = "1 2 3 4";
answerString.split(' ').forEach(function (item) {
answerInt.push(parseInt(item))
});
Eso no es una cadena. – delroh
@delroh Yep cambiado, gracias –
- 1. Convertir matriz de enteros a cadena separada por comas
- 2. ¿Cómo convertir esta cadena a una matriz de enteros?
- 3. puede convertir cadena en matriz?
- 4. cadena convertir a matriz
- 5. ¿Cómo convertir una cadena de números clojure en enteros separados?
- 6. Lista de enteros en cadena (matriz de bytes) - python
- 7. ¿Cómo convertir una cadena de números separados por comas a una matriz de números enteros?
- 8. PHP convertir cadena a matriz
- 9. Convertir cadena que contiene varios números en números enteros
- 10. Convertir PHP cadena de matriz en una matriz
- 11. ¿Convertir una matriz de enteros en una matriz de cadenas en Ruby?
- 12. Convertir matriz a cadena en NodeJS
- 13. cómo convertir la matriz de bytes en una matriz de enteros
- 14. Python: convertir cadena a matriz de bytes
- 15. Cómo convertir cadenas en enteros en Python?
- 16. convertir matriz de cadena a matriz de bytes
- 17. Convertir una cadena de números separados en espacios en blanco en una cadena en enteros y colocarlos en las variables
- 18. cadena de enteros rompecabezas
- 19. Convertir matriz int a matriz de caracteres
- 20. Convertir cadena a matriz int usando LINQ
- 21. Problemas para convertir el conjunto de enteros a int [] array
- 22. Cómo convertir ArrayList en matriz de cadenas (cadena []) en C#
- 23. cómo dividir cadena en serie como enteros
- 24. Convertir cadena de Java en matriz de bytes
- 25. Buscar en matriz de enteros en Postgres
- 26. Interlocked.Increment una matriz de enteros
- 27. Convierta minutos enteros en Cadena "hh: mm"
- 28. convertir una cadena en una matriz de caracteres
- 29. ¿Convertir una matriz de bytes a cadena en Silverlight?
- 30. Cómo convertir Array cadena de matriz doble en una línea
short: 'for (var i = myArray.length; i--;) myArray [i] = myArray [i] | 0;' utilizando la conversión bit a bit y el bucle más corto – vsync
o con ES5: 'myArray.forEach (function (x, y, z) {z [y] = x | 0}) ' – vsync
@vsync - seguro ... pero cuando cualquier compilador va a acortarlo aún más que eso, ¿por qué hacer que mantenerlo sea doloroso?:) La claridad vale unos pocos bytes adicionales, especialmente cuando en realidad no será mucho más larga si se reduce al mínimo una vez. –