recorrer objetos objeto metodos eliminar elemento dinamico diccionario crear attribute arreglos array agregar javascript jquery arrays javascript-objects

objetos - recorrer objeto json javascript



cómo comprobar si todas las claves de objeto tienen valores falsos (8)

A partir de Lodash 4.0, overEvery puede ser usado

overEvery(saver, false) recorre cada elemento y verifica si es false

Devuelve true si cada elemento es false contrario devuelve false

Objeto JS:

var saver = { title: false, preview: false, body: false, bottom: false, locale: false };

La pregunta es ¿cómo comprobar si todos los valores son falsos ?

Puedo usar la función jQuery de $ .each () y alguna variable de marca, pero ¿puede haber una solución mejor?


Con lodash también puedes hacer const result = _.some(saver);


Corto y práctico de una sola línea, totalmente compatible con los navegadores:

Object.keys(saver).every(k => saver[k] === false);

o

Object.values(saver).every(v => v === false);

(aunque cuidado, Object.values() no es compatible con IE todavía).


En un comentario preguntas si puedes evitar la iteración. Puede hacerlo si utiliza una biblioteca javascript que admita un enfoque funcional, como Underscore , Lodash o Sugar .

Con Underscore y Lodash puedes escribir algo como esto:

var result = _.every(_.values(saver), function(v) {return !v;});

Con Sugar simplemente puedes escribir:

var result = Object.all(saver,false);


Esta es una solución muy simple que requiere JavaScript 1.8.5.

Object.keys(obj).every((k) => !obj[k])

Ejemplos:

obj = {''a'': true, ''b'': true} Object.keys(obj).every((k) => !obj[k]) // returns false obj = {''a'': false, ''b'': true} Object.keys(obj).every((k) => !obj[k]) // returns false obj = {''a'': false, ''b'': false} Object.keys(obj).every((k) => !obj[k]) // returns true

Alternativamente podrías escribir

Object.keys(obj).every((k) => obj[k] == false) Object.keys(obj).every((k) => obj[k] === false) // or this Object.keys(obj).every((k) => obj[k]) // or this to return true if all values are true

Consulte la referencia de Mozilla Developer Network Object.keys () para obtener más información.


Esto hará el truco ...

var result = true; for (var i in saver) { if (saver[i] === true) { result = false; break; } }

Puede iterar objetos usando un bucle, ya sea por índice o por clave (como arriba).

Si buscas un código ordenado, y no lo repites, simplemente ponlo en una función ...

Object.prototype.allFalse = function() { for (var i in this) { if (this[i] === true) return false; } return true; }

Entonces puedes llamarlo cuando lo necesites, así ...

alert(saver.allFalse());

Aquí hay una muestra de trabajo ...

Object.prototype.allFalse = function() { for (var i in this) { if (this[i] === true) return false; } return true; } var saver = { title: false, preview: false, body: false, bottom: false, locale: false }; console.log("all are false - should alert ''true''"); console.log(saver.allFalse()); saver.body = true; console.log("one is now true - should alert ''false''"); console.log(saver.allFalse());


Hazlo así,

for (var i in saver) { if (saver[i]) { return false; // here if any value is true it wll return as false / } } return true; //here if all value is false it wll return as true


Si desea hacerlo sin una iteración externa (es decir, en su código), intente asignar las propiedades a una matriz con $.map luego use $.inArray para ver si existe algún valor verdadero:

var allFalse = $.inArray(true, $.map(saver, function(obj){return obj})) < 0;

JSFiddle: http://jsfiddle.net/TrueBlueAussie/FLhZL/1/