2015-10-28 2 views
-2

J'ai un large éventail d'objets. Je veux faire une fonction de recherche avancée que je l'appelle comme ceci:Si je transmettais le nom du tableau sous la forme d'une chaîne à une fonction JS, alors comment le faire passer en boucle dans la fonction?

var x = searcArray('students.id=5','history.date=2015/10/10',and more args); 

La boucle de volonté fonction par élèves du tableau et la recherche de id = 5 puis boucle à travers histoire intérieur que étudiant et recherchez Date = 2015/10/10

revenir alors que tableau ou un objet

Alors, comment puis-je le faire avec JavaScript ou JQuery?

+0

Pourquoi ne pas simplement passer la chaîne '5' et la chaîne de date. Notez que vous pouvez l'évaluer dans votre cas mais cela n'a pas vraiment de sens pour moi –

+0

car ce n'est pas toujours student.id ou history.date – zezont4

+0

Donc passez en paramètre les objets pertinents et la propriété spécifique que vous voulez obtenir, par exemple: 'searcArray ({obj: étudiants, prop: 'id', correspond: 5}, {obj: histoire, prop: 'date', match: '2015/10/10'}, ...); 'Quoiqu'il en soit, cela ressemble un problème XY. Sans voir pourquoi vous auriez besoin de ça, difficile de vous dire ce que vous devriez utiliser ... –

Répondre

0

En js de vanille vous pouvez utiliser Array Filter ou Array Find mais il existe beaucoup de bibliothèques pour les collections comme underscore.js

+0

wow, j'ai visité la page de documentation et il a de bonnes méthodes. merci – zezont4

0

Vous pouvez utiliser mot-clé arguments qui est essentiellement un tableau et il détient tous les args passés dans la fonction :

function searcArray(){ 
 
    var arr = Array.prototype.map.call(arguments, function(item){ 
 
    return item.split('=')[1] 
 
    }) 
 
    document.body.innerHTML = '<pre>'+ JSON.stringify(arr) + '</pre>'; 
 
} 
 
searcArray('students.id=5', 'history.date=2015/10/10');

0

j'ai essayé comme ça, vérifier here

window.students = {'id':5}; 
window.history = {'date':'2015/10/10'}; 
function searcArray(){ 
    var arr = arguments; 
    var results = []; 
    for(var i=0;i<arr.length;i++){ 
     var searchQuery = arr[i].split("=")[0]; 
     var searchTarget = arr[i].split("=")[1]; 
     var searchQueryArray = searchQuery.split(".")[0]; 
     var searchQueryIndex= searchQuery.split(".")[1]; 
     if(window[searchQueryArray][searchQueryIndex] == searchTarget){ 
      results.push(1); 
     }else{ 
      results.push(0); 
     } 
    } 
    return results; 
} 
var x = searcArray('students.id=5','history.date=2015/10/10'); 
console.log(x); 
+0

C'est une autre façon de contourner cela. merci – zezont4

+0

s'il est utile, s'il vous plaît le faire comme réponse –