2010-11-03 15 views
113

¿Cómo se obtiene el primer elemento de una matriz:primer elemento de matriz - jQuery

var ary = ['first', 'second', 'third', 'fourth', 'fifth']; 

yo probamos este:

alert($(ary).first()); 

Pero sería volver [object Object].

Así que necesito obtener el primer elemento de la matriz que debería ser el elemento first.

Respuesta

198

como esto

alert(ary[0]) 
+16

'var a = []; a [7] = 'foo'; alerta (a [0]); ' – Petah

+26

Esto supone que el primer elemento de la matriz siempre tiene un índice de 0. Usted sabe lo que dicen sobre la suposición ... – Andy

+7

@Andy No hubo suposiciones, ya que la pregunta de OP era bastante claro y específico. –

9

Trate alert(ary[0]);.

162

¿Por qué estás jQuery-ifying una matriz de JavaScript vainilla? ¡Utiliza JavaScript estándar!

var ary = ['first', 'second', 'third', 'fourth', 'fifth']; 
alert(ary[0]); 

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array

Además, needs more jQuery

Source, cortesía de bobince

+22

Upvote para la captura de pantalla; D – denu

+1

¡Estaba teniendo un día realmente basura hasta que vi esto! –

+4

¿Alguien notó la última pregunta 'relacionada' en la captura de pantalla?: D –

4

Cuando hay varias coincidencias, .First de jQuery() se utiliza para ir a buscar el primer elemento DOM que coincidía el selector css dado a jquery.

No necesita jQuery para manipular matrices javascript.

36

Si desea conservar la legibilidad siempre se puede añadir una primera función a la Array.protoype:

Array.prototype.first = function() { 
    return this[0]; 
}; 

A continuación, usted puede fácilmente recuperar el primer elemento:

[1, 2, 3].first(); 
> 1 
+7

se considera ser una muy mala práctica para jugar con prototipos de clases base de cualquier manera por una buena razón. –

+0

@DmitryMatveev Estoy de acuerdo, no usaría este tipo de código en bases de código público. Todos los desarrolladores deben comprender profundamente javascript para introducir este tipo de funciones de ayuda. – eliocs

+6

eso es tonto, ¿cómo es mejor que escribir '.first()' haciendo '[0]'? – jonschlinkert

43

Elemento de índice 0 puede no existir si el primer elemento ha sido eliminado
Demuestrelo en la consola de su navegador:

var a=['a','b','c']; 
delete a[0]; 
for(var i in a){console.log(i+' '+a[i]);} 

mejor manera de conseguir el primer elemento sin jQuery:

function first(p){for(var i in p)return p[i];} 
first(a); 
+0

a.entries() [0] debería hacerlo :) –

+1

Esto se debe a que no debe usar ese tipo de enumeración con una matriz, ya que está enumerando objetos y no miembros de la matriz. Use la indexación con un bucle for tradicional. –

+9

+1 para no confiar en las indicaciones numéricas – Mikhail

0

@NicoLwk Debe eliminar elementos con empalme, que cambiará la matriz de espalda. Por lo tanto:

var a=['a','b','c']; 
a.splice(0,1); 
for(var i in a){console.log(i+' '+a[i]);} 
+0

Responde a esta pregunta, y debe eliminarse – Lino

2

También es posible usar .get (0):

alert($(ary).first().get(0)); 

para obtener el primer elemento de la matriz.

31

método() puede utilizar el cambio de conseguir el primer punto, pero tenga cuidado de que este método modifica la matriz original (elimina el primer elemento y lo devuelve). Por lo tanto, la longitud de una matriz se reduce en uno. Este método se puede utilizar en casos en línea donde solo necesita obtener el primer elemento, pero no le importa la matriz original.

yourArray.shift() 
+0

Por qué no solo deshaces la matriz después, por ejemplo: var element = yourArray.shift(); yourArray.unshift (elemento); – Greg

+4

Porque es algo muy ineficiente y malo. Puedes obtener el primer elemento de una manera mucho más eficiente. Tanto el desplazamiento como el desvío hacen algunas comprobaciones y recorren todo el conjunto para lograr la tarea, ya que cuando elimina o agrega un nuevo elemento al principio, todos los demás índices deben desplazarse. Es como si tuviera un autobús lleno de gente, y cuando alguien del asiento trasero desea bajarse, vacía el autobús por la puerta de entrada y luego les pide que se suban nuevamente. – Selay

+0

@Selay que depende de las partes internas específicas del intérprete. –

0

Utilice esto para dividir caracteres en javascript.

var str = "boy, girl, dog, cat"; 
var arr = str.split(","); 
var fst = arr.splice(0,1).join(""); 
var rest = arr.join(","); 
-1

Declarar un prototipo para conseguir primera matriz elemento como:

Array.prototype.first = function() { 
    return this[0]; 
}; 

luego usarlo como:

var array = [0, 1, 2, 3]; 
var first = array.first(); 
var _first = [0, 1, 2, 3].first(); 

O simplemente (:

first = array[0]; 
3

encontrar el primer elemento de una matriz usando un filtro:

function first<T>(arr: T[], filter: (v: T) => boolean): T { 
    let result: T; 
    return arr.some(v => { result = v; return filter(v); }) ? result : undefined; 
} 

en JavaScript claro:

function first(arr, filter) { 
    var result; 
    return arr.some(function (v) { result = v; return filter(v); }) ? result : undefined; 
} 

Y del mismo modo, indexOf:

a máquina:

function indexOf<T>(arr: T[], filter: (v: T) => boolean): number { 
    let result: number; 
    return arr.some((v, i) => { result = i; return filter(v); }) ? result : undefined; 
} 

En javascript normal:

function indexOf(arr, filter) { 
    var result; 
    return arr.some(function (v, i) { result = i; return filter(v); }) ? result : undefined; 
} 
13

Si la matriz no está garantizada a poblarse de índice de cero, puede utilizar Array.prototype.find():

var elements = [] 
elements[1] = 'foo' 
elements[2] = 'bar' 

var first = function(element) { return !!element }  
var gotcha = elements.find(first) 

console.log(a[0]) // undefined 
console.log(gotcha) // 'foo' 
+3

Esto realmente debería votarse más alto. Es la solución más concisa que veo que usa vain js y cuentas para matrices dispersas. –

+0

No funcionará en IE11: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find –

3

método que obras con matrices, y trabaja con objetos también (ten cuidado, los objetos no tienen un orden garantizado!).

Prefiero este método más, porque la matriz original no se modifica.

// In case of array 
var arr = []; 
arr[3] = 'first'; 
arr[7] = 'last'; 
var firstElement; 
for(var i in arr){ 
    firstElement = arr[i]; 
    break; 
} 
console.log(firstElement); // "first" 

// In case of object 
var obj = { 
    first: 'first', 
    last: 'last', 
}; 

var firstElement; 

for(var i in obj){ 
    firstElement = obj[i]; 
    break; 
} 

console.log(firstElement) // First; 
0

Si está encadenando una vista a las funciones de la matriz, p.

array.map(i => i+1).filter(i => i > 3)

y desea que el primer elemento después de estas funciones se puede simplemente añadir un .shift() no modifica el original array, es una manera más agradable que array.map(i => i+1).filter(=> i > 3)[0]

Si desea que el primer elemento de una matriz sin modificar el original puede usar array[0] o array.map(n=>n).shift() (sin el mapa se modificará el original. En este caso, por cierto, sugeriría la versión ..[0].

0
var ary = ['first', 'second', 'third', 'fourth', 'fifth']; 

console.log(Object.keys(ary)[0]); 

Hacer cualquier matriz de objetos (req), entonces simplemente hacer Object.keys(req)[0] para recoger la primera clave de la matriz de objetos.

+2

Si bien este fragmento de código puede resolver la pregunta, [incluida una explicación] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. – DimaSan

0

También puede usar este componente de fuente abierta array-first para obtener el primer elemento de cualquier matriz de Javascript.

Ejemplos:

first([1, 2, 3]) // => 1 
first(['a', 'b', 'c']) // => 'a' 

También pueden probar this NPM package.

0

La respuesta de @thomax es bastante buena, pero fallará si el primer elemento de la matriz es falso o falso-y (0, cadena vacía, etc.). Mejor simplemente devolver cierto para nada que no sea indefinido:

const arr = []; 
arr[1] = ''; 
arr[2] = 'foo'; 

const first = arr.find((v) => { return (typeof v !== 'undefined'); }); 
console.log(first); // '' 
2
array.find(e => !!e); // return the first element 

ya que "encuentra" devolver el primer elemento que coincide con el filtro & & !!e partido de cualquier elemento.

Nota esto sólo funciona cuando el primer elemento no es un "Falsy": null, false, NaN, "", 0, undefined

+1

Abdennour para aclarar para otros su condición coincide con cualquier elemento de verdad, es decir, const example = [null, NaN, 0, undefined, {}, 3, 'a']; const firstTruthyElement = example.find(e => !!e); // assigns the 5th element, the first non falsy: {} PDA

+0

Gracias @PDA para ponerse al día. Por cierto, cadena vacía se considera también falsy –

0

Los ejemplos anteriores funcionan bien cuando el índice de matriz empieza en cero. thomax's answer no se basó en el índice que comienza en cero, pero se basó en Array.prototype.find al que no tuve acceso. La siguiente solución que usa jQuery $.each funcionó bien en mi caso.

let haystack = {100: 'first', 150: 'second'}, 
    found = null; 

$.each(haystack, function(index, value) { 
    found = value; // Save the first array element for later. 
    return false; // Immediately stop the $.each loop after the first array element. 
}); 

console.log(found); // Prints 'first'. 
-1

ES6 fácil:

let a = [] 
a[7] = 'A' 
a[10] = 'B' 

let firstValue = a.find(v => v) 
let firstIndex = a.findIndex(v => v) 
0

Usando ES6 desestructuración

let [first] = [1,2,3]; 

Qué es la misma que

let first = [1,2,3][0]; 
Cuestiones relacionadas