我不知道我的术语是否正确,但我创建了以下功能:
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");
我想要实现的目标:
在上面的示例中搜索zip“2000”应输出:
2000,市B,信息B. 2000年,市政府C,信息C
我的思路
我以为我会找到字符串出现的出现(索引),然后检索所需的数据,如下所示:
console.log(myArray[i].myInfo);
其中i是数组中的索引
myArray[i].myZip
匹配“2000”。
但是,我无法使indexOf在我创建的对象中搜索字符串,也无法检索符合相同条件的所有其他事件。
我选择正确的方式开始吗?
如果你知道应该避免使用jQuery或其他外部库,我该如何处理呢?
我希望我有点清楚 - 谢谢你的想法和建议。
答案 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];
即可获得符合过滤条件的集合。如果您想要返回比找到的第一个集合更多的结果,只需将它们按顺序添加到新数组中并在结尾处返回。