repetidos - saber si existe un elemento javascript
¿Cómo verifico JavaScript si existe un valor en un determinado índice de matriz? (16)
¿Funcionará esto para probar si un valor en la posición "índice" existe o no, o hay una mejor manera de hacerlo?
if(arrayName[index]==""){
// do stuff
}
Con Lodash, puedes hacer:
if(_.has(req,''documents'')){
if (req.documents.length)
_.forEach(req.documents, function(document){
records.push(document);
});
} else {
}
if(_.has(req,''documents''))
es para verificar si nuestro objeto de solicitud tiene una propiedad llamada documents
y si tiene esa propiedad, el siguiente if (req.documents.length)
es para validar si no es un matriz vacía, por lo que las otras cosas como forEach
se pueden proceder.
Depende de lo que quieras decir con "vacío".
Cuando intenta obtener el valor de una propiedad en un objeto que no tiene ninguna propiedad con ese nombre, obtendrá el valor undefined
.
Eso es lo que sucede con las matrices dispersas: no todos los índices entre 0
y array.length-1
existen.
Así que puedes verificar si array[index] === undefined
.
Sin embargo, el index
propiedad podría existir con un valor undefined
. Si desea filtrar este caso, puede usar el operador in
o hasOwnProperty
, como se describe en ¿Cómo hasOwnProperty
si un objeto tiene una propiedad en JavaScript?
index in array;
array.hasOwnProperty(index);
Si desea considerar que una propiedad existente con un valor no undefined
o null
no existe, puede usar la array[index] == undefined
comparación suelta array[index] == undefined
o array[index] == null
.
Si sabe que la matriz no es dispersa, podría comparar el index
con array.length
. Pero para estar seguro, es posible que desee asegurarse de que el index
realmente un índice de matriz. Consulte Comprobar si el nombre de la propiedad es índice de matriz.
Me encontré con este problema utilizando datos de laravel. Estaba almacenando un valor JSON llamado properties
en un registro de actividad y quería mostrar un botón basado en que este valor está vacío o no.
Bueno, las tablas de datos interpretaban esto como una matriz si estaba vacía, y un objeto si no lo estaba, por lo tanto, la siguiente solución funcionó para mí:
render: function (data, type, full) {
if (full.properties.length !== 0) {
// do stuff
}
}
Un objeto no tiene una propiedad de longitud.
Me gustaría señalar algo que algunos parecen haberse perdido: a saber, es posible tener una posición de matriz "vacía" en medio de su matriz. Considera lo siguiente:
let arr = [0, 1, 2, 3, 4, 5]
delete arr[3]
console.log(arr) // [0, 1, 2, empty, 4, 5]
console.log(arr[3]) // undefined
La forma natural de verificar sería ver si el miembro de la matriz no está definido, no estoy seguro si existen otras formas.
if (arr[index] === undefined) {
// member does not exist
}
No podemos hacer esto:
if(arrayName.length > 0){
//or **if(arrayName.length)**
//this array is not empty
}else{
//this array is empty
}
Para verificar si nunca ha sido definido o si fue eliminado:
if(typeof arrayName[index]==="undefined"){
//the index is not in the array
}
También funciona con matrices asociativas y matrices donde se eliminó algún índice
Para verificar si nunca se definió, se eliminó O es un valor vacío nulo o lógico (NaN, cadena vacía, falso):
if(typeof arrayName[index]==="undefined"||arrayName[index]){
//the index is not defined or the value an empty value
}
Puede usar la biblioteca Loadsh para hacer esto de manera más eficiente, como:
Si tiene una matriz llamada "mascotas", por ejemplo:
var pets = [''dog'', undefined, ''cat'', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + '': '' + _.isEmpty(pet) ) });
Para verificar todos los valores de matriz para valores nulos o no definidos:
var pets = [''dog'', undefined, ''cat'', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + '': '' + _.isEmpty(pet) ) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
Ver más ejemplos en http://underscorejs.org/
Recomendaría crear una función como esta:
function isEmptyEl(array, i) {
return !(array[i]);
}
Podrías llamarlo así:
if (isEmptyEl(arrayName, indexVal)) {
console.log(''arrayName['' + indexVal + ''] is empty'');
}
Obligando al desarrollador a adherirse a la interfaz isEmptyEl detectará errores de entrada, como un arrayName indefinido o variables indexVal.
(En general, es una buena práctica programar de manera defensiva cuando se programa en Javascript).
Obtendrías un error como este si arrayName no estuviera definido:
Uncaught ReferenceError: arrayName is not defined
at <anonymous>:2:15
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
Resultados similares para un indexVal no definido.
Obtendrá un error si los valores de matriz o índice no existen.
Para una entrada válida, solo obtendrá un verdadero si arrayName [indexVal] es cualquiera de los siguientes:
- nulo
- indefinido
- Yaya
- cuerda vacía
- 0
- falso
Todas las matrices en JavaScript contienen elementos array.length
, comenzando con array[0]
hasta array[array.length - 1]
. Por definición, se dice que un elemento de la matriz con índice i
es parte de la matriz si i
está entre 0
y array.length - 1
inclusive.
Es decir, las matrices de JavaScript son lineales, comienzan con cero y van a un máximo, y las matrices no tienen un mecanismo para excluir ciertos valores o rangos de la matriz. Para averiguar si un valor existe en un índice de posición dado (donde el índice es 0 o un entero positivo), simplemente usa
if (index < array.length) {
// do stuff
}
Sin embargo, es posible que algunos valores de matriz sean nulos, undefined
, NaN
, Infinity
, 0 o toda una serie de valores diferentes. Por ejemplo, si agrega valores de matriz al aumentar la propiedad array.length
, cualquier valor nuevo será undefined
.
Para determinar si un valor dado es algo significativo, o se ha definido. Es decir, no undefined
, o null
:
if (typeof array[index] !== ''undefined'') {
o
if (typeof array[index] !== ''undefined'' && array[index] !== null) {
Curiosamente, debido a las reglas de comparación de JavaScript, mi último ejemplo se puede optimizar hasta:
if (array[index] != null) {
// The == and != operator consider null equal to only null or undefined
Usar solo .length
no es seguro y causará un error en algunos navegadores. Aquí hay una mejor solución:
if(array && array.length){
// not empty
} else {
// empty
}
O, podemos usar:
Object.keys(__array__).length
prueba esto si la matriz [índice] es nula
if (array[index] != null)
Bien, primero veamos qué pasaría si no existiera un valor de matriz en JavaScript, así que si tenemos una matriz como la siguiente:
const arr = [1, 2, 3, 4, 5];
y ahora verificamos si 6 está allí en el índice 5 o no:
arr[5];
y nos quedamos undefined
...
Básicamente, eso nos da la respuesta, la mejor manera de verificar si no está definido, así que algo como esto:
if("undefined" === typeof arrayName[index]) {
//array value is not there...
}
Es mejor NO hacer esto en este caso:
if(!arrayName[index]) {
//Don''t check like this..
}
Porque imagina que tenemos esta matriz:
const arr = [0, 1, 2];
y nosotros hacemos
if(!arr[0]) {
//This get passed, because in JavaScript 0 is falsy
}
Entonces, como ves, incluso el 0 está ahí, no se reconoce, hay algunas otras cosas que pueden hacer lo mismo y hacer que tu aplicación tenga errores, así que ten cuidado, los anoto a todos:
- indefinido : si el valor no está definido y no está
undefined
- nulo : si es nulo, por ejemplo, si no existe un elemento DOM ...
- cadena vacía :
''''
- 0 : número cero
- NaN : no es un número
- falso
Enfoque corto y universal.
Si desea verificar cualquier matriz si tiene valores falsos (como falso, indefinido, nulo o cadenas vacías), puede usar cada método () como este:
array.every(function(element) {return !!element;}); // returns true or false
Por ejemplo:
[''23'', null, 2, {key: ''value''}].every(function(element) {return !!element;}); // returns false
[''23'', '''', 2, {key: ''value''}].every(function(element) {return !!element;}); // returns false
[''23'', true, 2, {key: ''value''}].every(function(element) {return !!element;}); // returns true
Si necesita obtener un primer índice de valor falsy, puede hacerlo de la siguiente manera:
let falsyIndex;
if(![''23'', true, 2, null, {key: ''value''}].every(function(element, index) {falsyIndex = index; return !!element;})) {
console.log(falsyIndex);
} // logs 3
Si solo necesita verificar un valor falso de una matriz para un índice determinado, puede hacerlo de la siguiente manera:
if (!!array[index]) {
// array[index] is a correct value
}
else {
// array[index] is a falsy value
}
if(!arrayName[index]){
// do stuff
}
if(arrayName.length > index && arrayName[index] !== null) {
//arrayName[index] has a value
}
if(typeof arr ===''object'' && arr instanceof Array ){
if(!arr.length){
println ''empty''
}else{
printn ''not Empty''
}
}else{
println ''Null''
}
Si quiere decir ''Nulo'' -> Sus elementos son nulos o equivalen a '''', en este caso: compruebe si la matriz está vacía después de filtrar todos los elementos ''nulos''
if(!arr.clean().length){return ''is null''}
Por supuesto, el método Add Clean antes:
Array.prototype.clean=function(){return this.filter(function(e){return (typeof e !==''undefined'')&&(e!= null)&&(e!='''')})}