有没有办法通过可能存在于任何属性中的特定值来过滤对象数组?
假设我有这个对象:
var x = [
{
name: "one",
swp: "two"
},
{
name: "two",
swp: "three"
},
{
name: "aa",
swp: "bb"
}
];
With Array.prototype.filter
我可能会做
x.filter(function(y){ return y.name == "two"; });
然而,这将仅返回在其任何属性中具有“two”作为值的两个对象中的一个。
Whereas
function findValue( value ) {
var y = [];
for (obj in x) {
for (val in x[obj]) {
if (x[obj][val].match( value )) {
y.push(x[obj]);
}
}
}
return y;
}
可以完成这项工作,但这是一种蛮力方法。
有没有更好的方法来达到相同的结果?
var arrOfObj = []; // objects you're sifting
var prop = 'whatever';
var matches = arrOfObj.filter(obj => Object.keys(obj).some(k => obj[k] === prop));
你想要一个组合Array.prototype.filter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter and Array.prototype.some https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some如果数组中的任何元素与条件匹配,它会返回一个布尔值,一旦找到匹配项,它也会停止迭代数组(在本例中是每个对象的键)。如果你需要跨浏览器支持(并且由于某种原因不使用 babel),上面的 ES 5 版本是
var arrOfObj = []; // objects you're sifting
var prop = 'whatever';
var matches = arrOfObj.filter(function(obj) {
return Object.keys(obj).some(function(k) {
return obj[k] === prop;
});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)