在对象数组中搜索事件

时间:2014-02-07 12:29:14

标签: javascript arrays oop

我不知道我的术语是否正确,但我创建了以下功能:

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中搜索myCollection中的特定邮政编码
  • 显示来自myCollection的该邮政编码的其余数据
  • 对集合中相同邮政编码的所有其他事件执行相同操作

在上面的示例中搜索zip“2000”应输出:

2000,市B,信息B. 2000年,市政府C,信息C

我的思路

我以为我会找到字符串出现的出现(索引),然后检索所需的数据,如下所示:

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

其中i是数组中的索引

myArray[i].myZip

匹配“2000”。

但是,我无法使indexOf在我创建的对象中搜索字符串,也无法检索符合相同条件的所有其他事件。

我选择正确的方式开始吗?

如果你知道应该避免使用jQuery或其他外部库,我该如何处理呢?

我希望我有点清楚 - 谢谢你的想法和建议。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 }]

答案 2 :(得分:0)

在这种情况下,indexOf是当前i值,因此您只需执行var c = myArray[i];即可获得符合过滤条件的集合。如果您想要返回比找到的第一个集合更多的结果,只需将它们按顺序添加到新数组中并在结尾处返回。