2013-07-18 72 views
5

Tôi muốn tìm chỉ mục trong mảng. Các vị trí trong mảng là các đối tượng và tôi muốn lọc các thuộc tính của chúng. Tôi biết những phím nào tôi muốn lọc và giá trị của chúng. Vấn đề là lấy chỉ mục của mảng đáp ứng các tiêu chí.Tìm chỉ mục trong mảng đối tượng

Hiện tại, tôi đã tạo mã để lọc dữ liệu và cung cấp cho tôi dữ liệu đối tượng, chứ không phải chỉ mục mảng.

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

không thực sự là một câu trả lời nhưng bạn có thể đã sử dụng '_.findWhere' để có được chính xác kết quả tương tự như những gì bạn có bây giờ – soulcheck

Trả lời

2

here là thefiddle hy vọng nó sẽ giúp bạn

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

cảm ơn bạn rất nhiều, exacly những gì tôi cần :) Có một ngày tốt đẹp thưa ông! – norbert

+0

chào mừng ......... –

0

Tôi không nghĩ rằng bạn cần nhấn mạnh cho rằng js ole chỉ thường xuyên - hy vọng đây là những gì bạn đang tìm kiếm

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

Tôi nghĩ rằng ông muốn một' indexOf' không phải là một 'lastIndexOf' ... – Bergi

+0

gì mà ' prop === userid' điều phải làm ở đó? Bạn không thể bỏ qua việc liệt kê thuộc tính của 'dữ liệu [i]' sau đó hoàn toàn? – Bergi

+0

prop === userid phải bằng giá trị khóa của đối tượng mà tôi vừa lưu trữ trong một biến –

2

Tôi không chắc chắn, nhưng tôi nghĩ rằng đây là những gì bạn cần:

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

Đây phải là câu trả lời được chấp nhận vì nó IS sử dụng dấu gạch dưới. – Seth

11

Sử dụng Lo-Dash thay cho gạch dưới bạn có thể làm điều đó khá dễ dàng với _.findIndex().

var index = _.findIndex(array, { userid: '7', chid: 'default' }) 
Các vấn đề liên quan