Saltar al contenido

¿Cómo puedo filtrar un objeto JSON en JavaScript?

Esta noticia fue aprobado por nuestros expertos así se asegura la exactitud de este artículo.

Solución:

Además de las soluciones dadas, puede usar un estilo recursivo para verificar el keys.

Esta propuesta da la oportunidad de tener más objetos anidados dentro y obtener solo las partes filtradas.

function filterBy(val) 
    function iter(o, r) 
        return Object.keys(o).reduce(function (b, k) 
            var temp = ;
            if (k.toLowerCase().indexOf(val.toLowerCase()) !== -1) 
                r[k] = o[k];
                return true;
            
            if (o[k] !== null && typeof o[k] === 'object' && iter(o[k], temp)) 
                r[k] = temp;
                return true;
            
            return b;
        , false);
    

    var result = ;
    iter(obj, result);
    return result;


var obj =  Alarm:  Hello: 48, "World": 3, Orange: 1 , Rapid:  Total: 746084, Fake: 20970, Cancel: 9985, Word: 2343 , Flow:  Support: 746084, About: 0, Learn: 0 , test:  test1:  test2:  world: 42    ;

console.log(filterBy('ange'));
console.log(filterBy('flo'));
console.log(filterBy('wor'));
.as-console-wrapper  max-height: 100% !important; top: 0; 

Puedes crear una función usando reduce() y Object.keys() eso comprobará key nombres con indexOf() y devolver el resultado deseado.

var obj = 
  "Alarm": 
    "Hello": 48,
    "World": 3,
    "Orange": 1
  ,
  "Rapid": 
    "Total": 746084,
    "Fake": 20970,
    "Cancel": 9985,
    "Word": 2343
  ,
  "Flow": 
    "Support": 746084,
    "About": 0,
    "Learn": 0
  


function filterBy(val) 
  var result = Object.keys(obj).reduce(function(r, e) 
    if (e.toLowerCase().indexOf(val) != -1) 
      r[e] = obj[e];
     else 
      Object.keys(obj[e]).forEach(function(k) 
        if (k.toLowerCase().indexOf(val) != -1) 
          var object = 
          object[k] = obj[e][k];
          r[e] = object;
        
      )
    
    return r;
  , )
  return result;


console.log(filterBy('ange'))
console.log(filterBy('flo'))
console.log(filterBy('wor'))

Con el filter método creo que te refieres al Array#filter función. Esto no funciona para los objetos.

De todos modos, una solución para sus datos de entrada podría verse así:

function filterObjects(objects, filter) 
    filter = filter.toLowerCase();
    var filtered = ;
    var keys = Object.keys(objects);
    for (var i = 0; i < keys.length; i++) 
        var key = keys[i];
        if (objects.hasOwnProperty(key) === true) 
            var object = objects[key];
            var objectAsString = JSON.stringify(object).toLowerCase();
            if (key.toLowerCase().indexOf(filter) > -1 
    
    return filtered;

valoraciones y comentarios

Agradecemos que quieras añadir valor a nuestro contenido informacional tributando tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *