2016-05-25 4 views
0

Können sagen, ich habe var myVar = ['google','search','engine','results','count']Filter JSON-Objekt durch verschachtelte Objekt darin zu vergleichen und andere Array mit Hilfe von Javascript oder Jquery

für zB: JSON-Objekt `

myJSON = [{ 
    'title' : 'Google', 
    'url' : 'www.google.com', 
    'tags' : ['google','search','engine'] 
},{ 
    'title' : 'Yahoo', 
    'url' : 'www.yahoo.com', 
    'tags' : ['Yahoo','search','engine','news'] 
},{ 
    'title' : 'MSN', 
    'url' : 'www.msn.com', 
    'tags' : ['msn','search','engine','news'] 
},{ 
    'title' : 'Facebook', 
    'url' : 'www.facebook.com', 
    'tags' : ['social','search','media','chat','friends'] 
},] 

Ich möchte myJSON filtern durch den Vergleich zweier Arrays myVar und tags in myJSON.

nehmen myVar = ['search'] Filter alle Objekte in myJSON wenn myVar = ['engine'] Filter zurückkehren sollten nur 3 von Objekten in der myJSONmyVar Array abgestimmt mit tags Array zurückgeben sollten.

Antwort

0

Versuchen Sie, diese

var myVar = ['engine']; 
 
myJSON = [{ 
 
    'title': 'Google', 
 
    'url': 'www.google.com', 
 
    'tags': ['google', 'search', 'engine'] 
 
}, { 
 
    'title': 'Yahoo', 
 
    'url': 'www.yahoo.com', 
 
    'tags': ['Yahoo', 'search', 'engine', 'news'] 
 
}, { 
 
    'title': 'MSN', 
 
    'url': 'www.msn.com', 
 
    'tags': ['msn', 'search', 'engine', 'news'] 
 
}, { 
 
    'title': 'Facebook', 
 
    'url': 'www.facebook.com', 
 
    'tags': ['social', 'search', 'media', 'chat', 'friends'] 
 
}]; 
 

 
for (var i = 0; i < myVar.length; i++) { 
 
    for (var j = 0; j < myJSON.length; j++) { 
 
    if (JSON.stringify(myJSON[j]['tags']).indexOf(myVar[i]) >= 0) { 
 
     console.log(myJSON[j]); 
 
    } 
 
    } 
 
}

0

Sie funktionalen Ansatz nutzen können, die schnell, präzise und einfach zu verstehen:

var myVar = ['engine'] 

var myJSON = [{    'title' : 'Google', 
           'url' : 'www.google.com', 
           'tags' : ['google','search','engine'] 
          },{ 
           'title' : 'Yahoo', 
           'url' : 'www.yahoo.com', 
           'tags' : ['Yahoo','search','engine','news'] 
          },{ 
           'title' : 'MSN', 
           'url' : 'www.msn.com', 
           'tags' : ['msn','search','engine','news'] 
          },{ 
           'title' : 'Facebook', 
           'url' : 'www.facebook.com', 
           'tags' : ['social','search','media','chat','friends'] 
          }] 

var filtered = myJSON.filter(function(i){ 
    return myVar.reduce(function(result, current) { 
     return result || i.tags.some(function(v){ return v==current }) }, false) 
    }) ; 

console.log("Filtered", filtered); 

Siehe reduce und filter Array-Funktion Referenzen für mehr Einzelheiten.

Sie sollten Objekte nicht stringieren und String-Operationen über sie verwenden, die einen zusätzlichen, nicht benötigten Overhead verursachen würden.

0

Sie können filter und some Funktionen des Arrays wie unten verwenden.

var result = myJSON.filter(function(item){ 
    return item.tags.some(function(str){ 
     return myVar.indexOf(str) > -1; 
    }); 
}); 

console.log(result); 

Demo

Verwandte Themen