2013-07-18 14 views
5

Mi piacerebbe trovare l'indice nella matrice. Le posizioni nell'array sono oggetti e voglio filtrare le loro proprietà. So quali chiavi voglio filtrare e i loro valori. Il problema è di ottenere l'indice dell'array che soddisfa i criteri.Trova indice nella matrice di oggetti

Per ora ho creato il codice per filtrare i dati e restituire i dati oggetto, ma non l'indice dell'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

non proprio una risposta, ma si potrebbe avere utilizzato '_.findWhere' per ottenere esattamente lo stesso risultato di quello che hai ora – soulcheck

risposta

2

here è thefiddle spero che ti aiuta

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); 
} 

}

+0

grazie mille, esattamente quello che mi serviva :) Buona giornata signore! – norbert

+0

benvenuto ......... –

0

Non credo che è necessario sottolineare che solo per regolari js ole - spero che questo è quello che stai cercando

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

Credo che voglia un' indexOf' non un 'lastIndexOf' ... – Bergi

+0

Cosa c'è che' prop === cosa userid' dovrebbe fare lì? Non puoi omettere l'enumerazione delle proprietà di 'data [i]' allora interamente? – Bergi

+0

prop === userid deve eguagliare il valore della chiave dell'oggetto che ho appena memorizzato in una variabile –

2

Non sono sicuro, ma penso che questo è ciò che è necessario:

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

Questa dovrebbe essere la risposta accettata dal momento che sta usando il carattere di sottolineatura. – Seth

11

Utilizzando Lo-Dash al posto del carattere di sottolineatura, è possibile farlo abbastanza facilmente con _.findIndex().

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