2013-07-18 12 views
5

Ich möchte Index in Array finden. Positionen im Array sind Objekte, und ich möchte nach ihren Eigenschaften filtern. Ich weiß, welche Schlüssel ich filtern möchte und ihre Werte. Das Problem besteht darin, den Index des Arrays zu erhalten, das die Kriterien erfüllt.Index im Array von Objekten suchen

Für jetzt habe ich Code zum Filtern von Daten und gibt mir Objektdaten zurück, aber nicht Index von Array.

var data = [ 
     { 
      "text":"one","siteid":"1","chid":"default","userid":"8","time":1374156747 
     }, 
     { 
      "text":"two","siteid":"1","chid":"default","userid":"7","time":1374156735 
     } 
    ]; 

var filterparams = {userid:'7', chid: 'default'}; 

function getIndexOfArray(thelist, props){ 
    var pnames = _.keys(props) 
    return _.find(thelist, function(obj){ 
     return _.all(pnames, function(pname){return obj[pname] == props[pname]}) 
    })}; 

var check = getIndexOfArray(data, filterparams); // Want to get '2', not key => val 
+2

nicht wirklich eine Antwort, aber sie verwendet haben könnte '_.findWhere' genau das gleiche Ergebnis zu erhalten, was Sie haben jetzt – soulcheck

Antwort

2

here ist thefiddle zu hoffen, dass es Ihnen

for(var intIndex=0;intIndex < data.length; intIndex++){ 
    eachobj = data[intIndex]; 
var flag = true; 
for (var k in filterparams) { 

    if (eachobj.hasOwnProperty(k)) { 
     if(eachobj[k].toString() != filterparams[k].toString()){ 
      flag = false; 
     } 
    } 
} 
if(flag){ 
     alert(intIndex); 
} 
hilft 0

}

+0

danke soo viel, genau was ich brauchte :) Einen schönen Tag noch, Herr! – norbert

+0

willkommen ......... –

0

Ich glaube nicht Sie, dass nur regelmäßige ole js unterstreichen müssen - hoffen, das ist, was Sie suchen

var data = [ 
     { 
      "text":"one","siteid":"1","chid":"default","userid":"8","time":1374156747 
     }, 
     { 
      "text":"two","siteid":"1","chid":"default","userid":"7","time":1374156735 
     } 
    ]; 

var userid = "userid" 
var filterparams = {userid:'7', chid: 'default'}; 
var index; 
for (i=0; i < data.length; i++) { 
    for (prop in data[i]) { 
     if ((prop === userid) && (data[i]['userid'] === filterparams.userid)) { 
      index = i 
     } 
    } 
} 

alert(index); 
+1

Ich glaube, er will eine' indexOf' kein 'lastIndexOf' ... – Bergi

+0

Was ist das' prop === userid 's Sache soll dort gemacht werden? Können Sie die Eigenschaftsaufzählung von 'data [i]' dann nicht vollständig weglassen? – Bergi

+0

prop === Benutzer-ID muss gleich dem Schlüsselwert des Objekts, die ich gerade in einer Variablen gespeichert –

2

Ich bin nicht sicher, aber ich denke, dass das ist, was Sie brauchen:

var data = [{ 
    "text":"one","siteid":"1","chid":"default","userid":"8","time":1374156747 
}, { 
    "text":"two","siteid":"1","chid":"default","userid":"7","time":1374156735 
}]; 
var filterparams = {userid:'7', chid: 'default'}; 

var index = data.indexOf(_.findWhere(data, filterparams)); 
+2

Dies sollte die akzeptierte Antwort sein, da es Unterstrich verwendet. – Seth

11

Mit Lo-Dash anstelle von Unterstrich können Sie es ziemlich einfach mit _.findIndex() tun.

var index = _.findIndex(array, { userid: '7', chid: 'default' })