javascript过滤器对象数组

use*_*521 75 javascript arrays jquery

我有一系列对象,我想知道搜索它的最佳方法.鉴于以下示例,我如何搜索name = "Joe"age < 30?是否有任何jQuery可以帮助或我是否必须自己强行进行此搜索?

var names = new Array();

var object = { name : "Joe", age:20, email: "joe@hotmail.com"};
names.push(object);

object = { name : "Mike", age:50, email: "mike@hotmail.com"};
names.push(object);

object = { name : "Joe", age:45, email: "mike@hotmail.com"};
names.push(object);
Run Code Online (Sandbox Code Playgroud)

Vis*_*ioN 117

你可以使用jQuery.grep():

var found_names = $.grep(names, function(v) {
    return v.name === "Joe" && v.age < 30;
});
Run Code Online (Sandbox Code Playgroud)

演示: http ://jsfiddle.net/ejPV4/


lon*_*day 72

您可以使用以下[].filter方法轻松完成此操作:

var filterednames = names.filter(function(obj) {
    return (obj.name === "Joe") && (obj.age < 30);
});
Run Code Online (Sandbox Code Playgroud)

您需要为不支持该[].filter方法的浏览器添加垫片:此MDN页面提供此类代码.


Vad*_*hev 7

您可以利用jQuery.filter()函数从匹配元素的子集返回元素.

var names = [
    { name : "Joe", age:20, email: "joe@hotmail.com"},
    { name : "Mike", age:50, email: "mike@hotmail.com"},
    { name : "Joe", age:45, email: "mike@hotmail.com"}
   ];
   
   
var filteredNames = $(names).filter(function( idx ) {
    return names[idx].name === "Joe" && names[idx].age < 30;
}); 

$(filteredNames).each(function(){
     $('#output').append(this.name);
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="output"/>
Run Code Online (Sandbox Code Playgroud)


Aru*_*ini 6

对于那些想要使用任意键从对象数组中进行过滤的人:

function filterItems(items, searchVal) {
  return items.filter((item) => Object.values(item).includes(searchVal));
}
let data = [
  { "name": "apple", "type": "fruit", "id": 123234 },
  { "name": "cat", "type": "animal", "id": 98989 },
  { "name": "something", "type": "other", "id": 656565 }]


console.log("Filtered by name: ", filterItems(data, "apple"));
console.log("Filtered by type: ", filterItems(data, "animal"));
console.log("Filtered by id: ", filterItems(data, 656565));
Run Code Online (Sandbox Code Playgroud)

从 JSON 对象数组中过滤:**


Fak*_*san 5

var nameList = [
{name:'x', age:20, email:'x@email.com'},
{name:'y', age:60, email:'y@email.com'},
{name:'Joe', age:22, email:'joe@email.com'},
{name:'Abc', age:40, email:'abc@email.com'}
];

var filteredValue = nameList.filter(function (item) {
      return item.name == "Joe" && item.age < 30;
});

//To See Output Result as Array
console.log(JSON.stringify(filteredValue));
Run Code Online (Sandbox Code Playgroud)

您可以简单地使用javascript :)