给定数据,例如:
var people = [
{ 'myKey': 'John Kenedy', 'status': 1 },
{ 'myKey': 'Steeven Red', 'status': 0 },
{ 'myKey': 'Mary_Kenedy', 'status': 3 },
{ 'myKey': 'Carl Orange', 'status': 0 },
{ 'myKey': 'Lady Purple', 'status': 0 },
... // thousands more
];
如何有效地获取myKey
字符串Kenedy
中包含的所有对象的列表?
注意:我目前使用str.search()
:
搜索(“str”)返回匹配的位置。如果未找到匹配项,则返回-1。
按以下步骤操作:
var map_partial_matches = function(object, str){
var list_of_people_with_kenedy = [] ;
for (var j in object) {
if (object[j]["myKey"].search(str) != -1) {
object[j].presidentName = "yes"; // do something to object[j]
list_of_people_with_kenedy.push({ "people": object[j]["myKey"] }); // add object key to new list
}
} return list_of_people_with_kenedy;
}
map_partial_matches(people, "Kenedy");
我可以使用str.match()
:
str.match()
返回匹配项,作为Array对象。如果未找到匹配项,则返回null
。
无论如何它都有效,但我不知道它是否有效或完全转储。
答案 0 :(得分:2)
您可以使用filter()
:
var filtered = people.filter(function (item) {
if (item.myKey.indexOf("Kenedy") != -1)
return item;
});
您还可以结帐Sugar.js
答案 1 :(得分:2)
为了搜索未分类的对象,您需要了解其所有属性 - 所以我要说一个带indexOf
的简单循环将是您可以去的最佳选择:
var foundItems = [];
for(var i = 0; i < people.length ;i++)
{
if(people[i].myKey.indexOf('Kenedy') > -1)
foundItems.push(people[i]]);
}
也许你可以稍微调整一下,但它是你能得到的最好的。
答案 2 :(得分:1)
您可以编写一个基本函数,使用filter
根据键和值返回匹配数组:
function find(arr, key, val) {
return arr.filter(function (el) {
return el[key].indexOf(val) > -1;
});
}
var result = find(people, 'myKey', 'Kenedy');
或者使用普通for...loop
:
function find(arr, key, val) {
var out = [];
for (var i = 0, l = arr.length; i < l; i++) {
if (arr[i][key].indexOf(val) > -1) {
out.push(arr[i]);
}
}
return out;
}