Array.size () vs Array.length

385

¿Cuál es la diferencia entre los dos?

Entonces sé que array.size()es una función mientras que array.lengthes una propiedad. ¿Hay un caso de uso para usar uno sobre el otro? ¿Es uno más eficiente? (Me imagino .lengthque es significativamente más rápido, ya que es una propiedad en lugar de una llamada a un método?) ¿Por qué uno usaría la opción más lenta? ¿Hay algunos navegadores que sean incompatibles con uno u otro?

  var x = [];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);
  x =[1,2,3];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);

Imprimirá:

  0, 0, true
  3, 3, true
Abraham P
fuente
63
¿Dónde has encontrado el Array.size()método en JavaScript nativo?
VisioN
2
Chrome no tiene .size...
0x499602D2
1
@AbrahamP idk qué consola de Chrome estás usando ...
Naftali aka Neal
3
.size()es probable del marco del prototipo
MikeM

Respuestas:

535

Array.size () no es un método válido

Utilice siempre la propiedad de longitud

Hay una biblioteca o secuencia de comandos que agrega el método de tamaño al prototipo de matriz, ya que este no es un método de matriz nativo. Esto se hace comúnmente para agregar soporte para un getter personalizado. Un ejemplo de uso de esto sería cuando desee obtener el tamaño en la memoria de una matriz (que es lo único que se me ocurre que sería útil para este nombre).

Lamentablemente, Underscore.js define un sizemétodo que realmente devuelve la longitud de un objeto o matriz. Dado que, desafortunadamente, la propiedad de longitud de una función se define como el número de argumentos con nombre que la función declara que tenían que usar una alternativa y se eligió el tamaño (el conteo habría sido una mejor opción).

Gabriel
fuente
154

.size()no es una función nativa de JS Array(al menos no en ningún navegador que yo sepa).

.length debe ser utilizado


Si

.size() hace el trabajo en su página, asegúrese de que usted no tiene ninguna bibliotecas adicionales incluidos como prototipo que está limpiando con elArrayprototipo.

o

Puede haber algún complemento en su navegador que esté alterando el Arrayprototipo.

Naftali aka Neal
fuente
@BartFriederichs bueno, estoy en Chrome, pero eso es bueno saber :-D
Naftali aka Neal
Funciona en Chrome, no funciona en Firefox, tiendo a usar Chrome para depurar las necesidades, por lo que parecía funcionar. Gracias por señalar su inexistencia.
Abraham P
99
Si funciona en Chrome para usted, probablemente haya alguna biblioteca adicional a la que esté llamando en su página que la agregue al prototipo de matriz.
Spike Williams el
1
Versión 23.0.1271.97 [] .size function size () {return this.length;} Así que en realidad es solo una envoltura alrededor de .length ... ahora me siento estúpido ...
Abraham P
2
@AbrahamP, presiona F12 en ESTA página y escribe [].sizela consola. Si funciona, entonces tienes algún tipo de complemento de Chrome que está arruinando el prototipo de matriz, y estaría preocupado. :)
aquinas
30

La .size()función está disponible en Jquery y muchas otras bibliotecas.

La .lengthpropiedad funciona solo cuando el índice es un entero.

La lengthpropiedad será trabajar con este tipo de matriz:

var nums = new Array();
nums[0] = 1; 
nums[1] = 2;
print(nums.length); // displays 2

La lengthpropiedad no funcionará con este tipo de matriz:

var pbook = new Array(); 
pbook["David"] = 1; 
pbook["Jennifer"] = 2;
print(pbook.length); // displays 0

Entonces, en su caso, debería estar usando la .lengthpropiedad.

Saurabh Chandra Patel
fuente
¿Hay algo que funcione con Strings si el tamaño no funciona?
Chris
2
@Chris para matrices con claves de cadena, como las pbookanteriores, puede usar $(pbook).size();[requiere jQuery]
desagradable pasty
3
Sin embargo, ¿por qué pondrías dos espacios en todas partes?
Publicado
19

.size() es de jQuery, es muy probable que te confundas o que hayas tomado de otra persona que había importado la biblioteca de jQuery a su proyecto.

Si hubiera importado jQuery y escribiera como $(array).size(), devolvería la longitud de la matriz.

Julio Flores
fuente
1
Muchas bibliotecas lo usan .size()no solo es jquery
Naftali aka Neal
15

array.length no es necesariamente el número de elementos en la matriz:

var a = ['car1', 'car2', 'car3'];
a[100] = 'car100';
a.length; // 101

La longitud de la matriz es uno más que el índice más alto.

Como se indicó anteriormente, Array.size()no es un método válido.

Más información

usuario2811108
fuente
En la práctica es el número de artículos. La mayoría de los intérpretes de JS llenarán las filas de la matriz con indefinidos. En su ejemplo, tendrá 101 elementos en su matriz con 97 elementos sin valor (indefinido) pero los elementos están ahí. Se verá así: ['car1', 'car2', 'car3', undefined * 97, 'car100'] Si realiza un bucle en esta matriz, su variable de incremento tendrá un valor de 101 después del bucle.
ElJackiste
Por otro lado, array.length no es necesariamente el número de valor definido (no asignado) en la matriz.
ElJackiste
4

La propiedad 'length' devuelve (last_key + 1) para matrices con teclas numéricas:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
log.info( nums.length );

imprimirá 12!

Esto funcionará:

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );
cskwg
fuente
Si bien esta es una respuesta interesante, no estoy completamente seguro de que sea una respuesta a esta pregunta
OliverRadini
El OP preguntaba 'Array.size () vs Array.length'. De las discusiones anteriores, quedó claro que la función 'tamaño' no es parte de JavaScript estándar, sino que está implementada por las bibliotecas. Así que supongo que el OP está interesado en cómo recuperar la longitud real de las matrices de JavaScript. Estoy descubriendo una 'característica' poco conocida de JavaScript que puede conducir a un comportamiento inesperado, especialmente porque el comportamiento es diferente cuando la matriz contiene otros tipos de objetos, como cadenas, por ejemplo.
cskwg
2

El tamaño detecta duplicados, devolverá el número de valores únicos

const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(set1.size);
// expected output: 6
Rdo
fuente
1

En realidad, .size()no es un método de JavaScript puro, hay una propiedad .sizede acceso del objeto Set que se parece un poco, .size()pero no es un método de función, como dije, es una propiedad de acceso de un objeto Set para mostrar el número único de (únicos) elementos en un objeto Set.

La propiedad de accesor de tamaño devuelve el número de elementos (únicos) en un objeto Set.

const set1 = new Set();
const object1 = new Object();

set1.add(42);
set1.add('forty two');
set1.add('forty two');
set1.add(object1);

console.log(set1.size);
// expected output: 3

Y lengthes una propiedad de un objeto iterable (matriz) que devuelve el número de elementos en esa matriz. El valor es un entero de 32 bits sin signo que siempre es numéricamente mayor que el índice más alto de la matriz.

const clothing = ['shoes', 'shirts', 'socks', 'sweaters'];

console.log(clothing.length);
// expected output: 4
AmerllicA
fuente
0

podemos usar la propiedad .length para establecer o devolver el número de elementos en una matriz. el valor de retorno es un número

> set the length: let count = myArray.length;
> return lengthof an array : myArray.length

podemos. tamaño en caso de que necesitemos filtrar valores duplicados y obtener el recuento de elementos en un conjunto.

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
Sunali Bandara
fuente