javascriptfilter对象数组
我有一个对象的数组,我想知道最好的方式来search它。 给出下面的例子,我怎样才能searchname = "Joe"
, age < 30
? 有没有什么jQuery可以帮助或者我必须暴力强制search自己?
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);
你可以使用jQuery.grep()
:
var found_names = $.grep(names, function(v) { return v.name === "Joe" && v.age < 30; });
演示: http : //jsfiddle.net/ejPV4/
你可以用[].filter
方法很容易的做到这一点:
var filterednames = names.filter(function(obj) { return (obj.name === "Joe") && (obj.age < 30); });
您将需要为不支持[].filter
方法的浏览器添加垫片: 此MDN页面提供了此类代码。
你可以利用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); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="output"/>
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 alert(JSON.stringify(filteredValue));
这么快问题。 如果你有两个对象数组,并且你想“alignment”这些对象数组,那么你可以确保每个数组的对象与其他数组的顺序相同? 如果你不知道数组里面的任何对象的键和值是什么,那么怎么办呢?
所以你需要为你的[].filter
, [].map
等使用'WildCard Expression'。你如何获得通配符expression式?
var jux = (function(){ 'use strict'; function wildExp(obj){ var keysCrude = Object.keys(obj), keysA = ('a["' + keysCrude.join('"], a["') + '"]').split(', '), keysB = ('b["' + keysCrude.join('"], b["') + '"]').split(', '), keys = [].concat(keysA, keysB) .sort(function(a, b){ return a.substring(1, a.length) > b.substring(1, b.length); }); var exp = keys.join('').split(']b').join('] > b').split(']a').join('] || a'); return exp; } return { sort: wildExp }; })(); var sortKeys = { k: 'v', key: 'val', n: 'p', name: 'param' }; var objArray = [ { k: 'z', key: 'g', n: 'a', name: 'b' }, { k: 'y', key: 'h', n: 'b', name: 't' }, { k: 'x', key: 'o', n: 'a', name: 'c' } ]; var exp = jux.sort(sortKeys); console.log('@juxSort Expression:', exp); console.log('@juxSort:', objArray.sort(function(a, b){ return eval(exp); }));
您也可以在每个对象的迭代中使用此函数,以便为每个对象中的所有键创build更好的集合expression式,然后以这种方式过滤数组。
这是我几乎完成的API Juxtapose的一个小片段,它是这样做的,它与豁免,对象单元和数组缩合的对象相等。 如果这些是你需要或想要为你的项目的东西,请评论,我会让lib更快访问。
希望这可以帮助! 快乐编码:)