ECMAScript 5有数组类型的filter()原型,但没有对象类型,如果我理解正确的话。
我如何在JavaScript中实现对象的过滤器()?
假设我有这个对象:
var foo = {
bar: "Yes"
};
我想写一个过滤器(),工作在对象:
Object.prototype.filter = function(predicate) {
var result = {};
for (key in this) {
if (this.hasOwnProperty(key) && !predicate(this[key])) {
result[key] = this[key];
}
}
return result;
};
当我在下面的演示中使用它时,这是有效的,但是当我将它添加到使用jQuery 1.5和jQuery UI 1.8.9的站点时,我在FireBug中得到JavaScript错误。
Object.prototype.filter = function(predicate) {
var result = {};
for (key in this) {
if (this.hasOwnProperty(key) && !predicate(this[key])) {
console.log("copying");
result[key] = this[key];
}
}
return result;
};
var foo = {
bar: "Yes",
moo: undefined
};
foo = foo.filter(function(property) {
return typeof property === "undefined";
});
document.getElementById('disp').innerHTML = JSON.stringify(foo, undefined, ' ');
console.log(foo);
#disp {
white-space: pre;
font-family: monospace
}
<div id="disp"></div>
如果您愿意使用下划线或lodash,您可以使用pick(或与其相反的省略)。
来自underscore文档的例子:
_.pick({name: 'moe', age: 50, userid: 'moe1'}, 'name', 'age');
// {name: 'moe', age: 50}
或者使用回调(对于lodash,使用pickBy):
_.pick({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object) {
return _.isNumber(value);
});
// {age: 50}
鉴于
object = {firstname: 'abd', lastname:'tm', age:16, school:'insat'};
keys = ['firstname', 'age'];
然后:
keys.reduce((result, key) => ({ ...result, [key]: object[key] }), {});
// {firstname:'abd', age: 16}
/ /帮助
函数过滤器(对象,…键){
返回键。Reduce ((result, key) =>({…结果,[key]:对象[key]}), {});
};
/ /实例
Const person ={名:' abd',姓:'tm',年龄:16岁,学校:'insat'};
//期望只选择名字和年龄键
console.log (
Filter (person, 'firstname', 'age')
)
ES6进近...
假设你有下面这个对象:
const developers = {
1: {
id: 1,
name: "Brendan",
family: "Eich"
},
2: {
id: 2,
name: "John",
family: "Resig"
},
3: {
id: 3,
name: "Alireza",
family: "Dezfoolian"
}
};
创建一个函数:
const filterObject = (obj, filter, filterValue) =>
Object.keys(obj).reduce((acc, val) =>
(obj[val][filter] === filterValue ? acc : {
...acc,
[val]: obj[val]
}
), {});
叫它:
filterObject(developers, "name", "Alireza");
并将返回:
{
1: {
id: 1,
name: "Brendan",
family: "Eich"
},
2: {
id: 2,
name: "John",
family: "Resig"
}
}