2014-02-07 57 views
0

我不知道我是否有術語的權利,但我已經創建了以下功能:搜索對象數組中的一個occurence

function myCollection(zip, municipality, info) { 

    this.myZip = zip; 
    this.myMuni = municipality; 
    this.myInfo= info; 
} 

然後,我創建了以下陣列和數據添加到它:

var myArray = new Array(); 

myArray[0] = new myCollection("1000", "municipality A", "info A"); 
myArray[1] = new myCollection("2000", "municipality B", "info B"); 
myArray[2] = new myCollection("2000", "municipality C", "info C"); 
myArray[3] = new myCollection("3000", "municipality D", "info D"); 

我想什麼來實現:

  • 內myArray的WH搜索ERE在MyCollection的特定郵政編碼發生
  • 顯示用數據的從MyCollection的其餘部分爲郵政編碼
  • 收集

一種用於拉鍊搜索「內完成相同爲同一郵政編碼的所有其他出現次數2000" 在examply上述應該輸出:

2000年,市B,信息乙 2000,直轄市C,信息ç

我的思緒列車

我想我找到OCCURENCES(索引),其中串發生,然後檢索這樣所需要的數據:

console.log(myArray[i].myInfo); 

其中i是陣列中的索引,其中

myArray[i].myZip 

匹配「2000」。

但是,我無法讓indexOf在我創建的對象中搜索字符串,也無法檢索到符合相同條件的所有其他匹配項。

我是否選擇正確的方式來做到這一點?

我應該如何解決這個問題,如果你知道應該避免使用jQuery或其他外部庫?

我希望我有點清楚 - 謝謝你的想法和建議。

+0

只需遍歷數組並測試'myArray [i] .myZip === mySearchedValue'。那我就是你需要的索引。 –

回答

1

你可以使用一個很好的舊while循環:

function findAll(array, fn) { 
    var result = [], i = -1; 
    while (++i < array.length) { 
     if (fn(array[i]) === true) result.push(array[i]); 
    } 
    return result; 
} 

用例:

var a = [{ a: 1 }, { a: 2 }, { a: 3 }]; 
var result = findAll(a, function (item) { 
    return item.a !== 2; 
}); 
result; // [{ a: 1 }, { a: 3 }] 
0

在這種情況下indexOf是當前的i值,因此您只需執行var c = myArray[i];即可獲取符合過濾條件的集合。如果您想返回比找到的第一個集合更多的結果,只需將它們按順序添加到新數組中,並在最後返回。

1

你可以簡單地遍歷對象:

search = function (arr, keyName, value) { 
    if (arr && keyName && value) { 
     var i, j = arr.length; 
     for (i = 0; i < j; i += 1) { 
      if (arr[i][keyName] === value) { 
       return { 
        index : i, 
        item : arr[i] 
       } 
      } 
    }; 
    return {} 
}; 

然後:

search(myArray, 'myZip', 2000);