Tabla de contenido
manipulacion de arreglos javascript
Usando enumeraciones en clases internas
iterar sobre elementos de enumeración
Use la clase de enumeración en el interruptor
métodos value(), ordinal() y valueOf()
miembros de la clase de enumeración
manipulacion de arreglos javascript
Hoy,
javascript
explicaré algunas operaciones comunes de matrices, con la esperanza de ser útiles para los desarrolladores. Veamos los tres bucles comunes a continuación.
en bucle
var arr =[1, 3, 8, 4]
for (var i = 0,j = arr.length; i < j; i++) {
console.log(arr[i], i)
}
// Prints:
// [0] is 1 0
// [1] is 3 1
// [2] is 8 2
// [3] is 4 3
para en bucle
var arr =[1, 3, 8, 4]
var map ={a: 1,b: 2,c: 3}
Array.prototype.text =5
for (var i in arr) {
console.log(arr[i], i)
}
for (var i in map) {
console.log(map[i], i)
}
// Prints arr:
// [0] is 1 "0"
// [1] is 3 "1"
// [2] is 8 "2"
// [3] is 4 "3"
// [4] is 5 "text"
//prints map:
// [0] is 1 "a"
// [1] is 2 "b"
// [2] is 3 "c"
en bucle
var arr =[1, 3, 8, 4]
for (var i of arr) {
console.log(i)
}
// Prints:
// [0] is 1
// [1] is 2
// [2] is 3
// [3] is 8
// [4] is 4
Se puede ver que
for
el ciclo yfor of
el ciclo atraviesan la matriz en sí, pero la diferencia es el valor de i, el primero es el índice y el último es el valor de la matriz.for in
El bucle no solo atraviesa la matriz en sí, sino que también atraviesa el prototipo y puede atravesar objetos al mismo tiempo. Tenga en cuenta aquí que el valor de i esstring
del tipo "0,1,2,3" Resumen:for
el ciclo puede satisfacer la mayoría de nuestras situaciones, pero es la más problemática, obtener el índice, es mejor obtenerfor of
la matriz directamente como ese valor.for in
La función de bucle es la más fuerte y puede atravesar objetos, pero el inconveniente es atravesar el objeto prototipo, lo que a veces puede afectar nuestro recorrido. Los 3 bucles anteriores puedenbreak
salir del bucle.
forEach bucle
var arr =[1, 3, 8, 4]
arr.forEach((row, index, test) = >{
console.log(row, index, test)
})
// Prints:
// [0] is 1 0 arr
// [1] is 2 1 arr
// [2] is 3 2 arr
// [3] is 8 3 arr
// [4] is 4 4 arr
Se puede ver que
forEach
el ciclo yfor in
el ciclo son muy similares, la diferencia esforEach
que el recorrido tiene la forma de una función de devolución de llamada, y los parámetros son el valor de la matriz, el índice y la matriz en sírow
. se puede procesar y la propia matriz se cambiará.forEach
No es tan amigable con la necesidad de interrumpir el recorrido, ybreak
el bucle no se puede terminar pasando. En la mayoría de los casosforEach
, es fácil satisfacer nuestro recorrido, peroforEach
el ciclo tiene el problema de las variables de contexto (si no se puede usar la función de flecha, se usa la función de flecha para evitar este problema).
recorrido del mapa
var arr =[1, 3, 8, 4]
var newArr = arr.map((row, index, test) = >{
return row
})
arr.push(5)
console.log(arr, newArr)
// Prints:
//[1,3,8,4,5],[1,3,8,4]
map
El recorridoforEach
es lo mismo que el parámetro de recorrido. La función de devolución de llamada también se usa para recorrer toda la matriz. La diferencia es quemap
el recorridoreturn
nos devuelve una nueva matriz.
operación de filtro
var arr =[1, 3, 8, 4]
var newArr = arr.filter((row, index, test) = >{
return row >= 5
})
console.log(newArr)
// Prints:
//[8]
filter
La operación se usa para filtrar la matriz, encontrar el valor que cumple la condición y devolver una nueva matriz, los parámetros de la función de devolución de llamada son los mismos yforEach
volvertrue false
para determinar si se cumple la condición de la nueva matriz.
operación de concatenación
var arr =[1, 3, 8, 4]
var arr2 =[4, 5]
var newArr = arr.concat(arr2)
var newArr1 = arr.concat()
console.log(newArr, arr2)
// Prints:
//[1, 3, 8, 4, 4, 5]
//[1, 3, 8, 4]
concat
Las operaciones se utilizan para combinar matrices y devolver una nueva matriz. Aquí hay una operación show quearr.concat()
puede copiar fácilmente una matriz con solo una línea de código.
clasificarclasificar
var arr =[1, 3, 8, 4]
arr.sort((a, b) = >a > b)
console.log(arr)
// Prints:
// [1, 3, 4, 8]
sort ordena la matriz y acepta una función de devolución de llamada. El parámetro de la función es 2 elementos consecutivos en la matriz. El código anterior implementa de manera similar una ordenación de burbujas y regresa
true false
para
algunas otras operaciones
//shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
//unshift:将参数添加到原数组开头,并返回数组的长度
//pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
//push:将参数添加到原数组末尾,并返回数组的长度
//reverse:将数组反序
//splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
//slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
//join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
//some(),every()判断数组中是否存在满足条件的值,前者有一个为true则返回true,后者所有未true才返回true,有点像&&和||。
//这里写一个数组比较的问题
[]==[]
//prints:false
var a1 =[1, 2, 3]
var a2 =[1, 2, 3]
a1.toString() == a2.toString()
//prints:true
//上面的方式巧妙的避开了大量代码来判断数组是否相同
manipulación de objetos
var map1 ={name: 'jack',age: 21,sex: '0'}
var map2 ={phone: '123456'}
var map3 =Object.assign(map1, map2)
var arr =Object.keys(map1)
console.log(arr)
console.log(map3)
//prints:
//["name", "age", "sex"]
//{name: "jack", age: 21, sex: "0", phone: "123456"}
Puede ver que
Object.keys
el método puedekey
formar una matriz de objetos, y cuando obtenemos la matriz, podemos usarforEach
otros métodos para atravesar el objeto.Object.assign
Las propiedades de n objetos se pueden fusionar, y las últimas propiedades sobrescribirán las propiedades anteriores, y finalmente se obtendrá un nuevo objeto. Estos dos métodos es6 son muy prácticos.
Enumeración de Java (enum)
Una enumeración de Java es una clase especial que generalmente representa un conjunto de constantes, como 4 estaciones en un año, 12 meses en un año, 7 días en una semana y direcciones como este, oeste, norte, etc.
Una clase de enumeración de Java se define mediante la palabra clave enum, y cada constante está separada por una coma, .
Por ejemplo, defina una clase de enumeración de color.
enum Color
{
RED, GREEN, BLUE;
}
Las constantes de color de la clase Color enumerada anteriormente incluyen ROJO, VERDE, AZUL, que representan rojo, verde y azul respectivamente.
Ejemplo de uso:
ejemplo
enum Color
{ ROJO, VERDE, AZUL; }
public class Test
{ // Salida de ejecución public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } }
El resultado de ejecutar el código anterior es:
RED
Usando enumeraciones en clases internas
Las clases de enumeración también se pueden declarar en clases internas:
ejemplo
prueba de clase pública
{ enum Color { ROJO, VERDE, AZUL; }
// Salida de ejecución
public static void main(String[] args)
{ Color c1 = Color.RED; System.out.println(c1); } }
El resultado de ejecutar el código anterior es:
RED
Cada enumeración se implementa internamente a través de Class, y todos los valores de enumeración son finales estáticos públicos.
La conversión de color de la clase de enumeración anterior se implementa en la clase interna:
class Color
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color GREEN = new Color();
}
iterar sobre elementos de enumeración
Los elementos de una enumeración se pueden iterar usando la instrucción for:
ejemplo
enum Color
{ ROJO, VERDE, AZUL; } public class MyClass { public static void main(String[] args) { for (Color myVar : Color.values()) { System.out.println(myVar); } } }
El resultado de ejecutar el código anterior es:
RED
GREEN
BLUE
Use la clase de enumeración en el interruptor
Las clases de enumeración se utilizan a menudo en declaraciones de cambio:
ejemplo
enum Color
{ ROJO, VERDE, AZUL; } public class MyClass { public static void main(String[] args) { Color myVar = Color.BLUE;
switch(myVar) { case RED: System.out.println("Red"); break; case GREEN: System.out.println("Green"); break; case BLUE: System.out.println("Blue" ) ; romper; } } }
El resultado de ejecutar el código anterior es:
蓝色
métodos value(), ordinal() y valueOf()
La clase de enumeración definida por enum hereda la clase java.lang.Enum de forma predeterminada e implementa las interfaces java.lang.Serializable y java.lang.Comparable.
Los métodos values(), ordinal() y valueOf() se encuentran en la clase java.lang.Enum:
- valores () devuelve todos los valores en la clase de enumeración.
- El método ordinal() encuentra el índice de cada constante de enumeración, como un índice de matriz.
- El método valueOf() devuelve la constante de enumeración para el valor de cadena especificado.
ejemplo
enum Color
{ ROJO, VERDE, AZUL; }
public class Test
{ public static void main(String[] args) { // 调用 valores() Color[] arr = Color.values();
// iterar la enumeración
para (Color col : arr)
{ // ver el índice System.out.println(col + "at index" + col.ordinal()); }
// Use valueOf() para devolver la constante de enumeración, si no existe, se informará una IllegalArgumentException
System.out.println(Color.valueOf("RED"));
// System.out.println(Color.valueOf ("BLANCO"));
}
}
El resultado de ejecutar el código anterior es:
RED at index 0
GREEN at index 1
BLUE at index 2
RED
miembros de la clase de enumeración
Las enumeraciones pueden usar sus propias variables, métodos y constructores al igual que las clases ordinarias. Los constructores solo pueden usar modificadores de acceso privados, por lo que no se pueden llamar externamente.
Las enumeraciones pueden contener métodos tanto concretos como abstractos. Si una clase de enumeración tiene un método abstracto, cada instancia de la clase de enumeración debe implementarlo.
ejemplo
enum Color
{ ROJO, VERDE, AZUL;
// Constructor
private Color()
{ System.out.println("Constructor llamado para: " + this.toString()); }
public void colorInfo()
{ System.out.println("Universal Color"); } }
public class Test
{ // 输出public static void main(String[] args) { Color c1 = Color.RED; Sistema.fuera.println(c1); c1.colorInfo(); } }
El resultado de ejecutar el código anterior es:
Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color
Resumir
Las matrices son un tipo de matriz común en javascript, y hay muchas operaciones. Elegir un método apropiado puede mejorar el rendimiento del programa y la legibilidad del código. Algunas funciones solo están disponibles en es6 y no se explicarán aquí, y no se comparará el rendimiento de la operación específica.