Dar*_*lyn 2 javascript arrays object
有没有办法按可能在任何属性中的特定值过滤对象数组?
假设我有这个对象:
var x = [
{
name: "one",
swp: "two"
},
{
name: "two",
swp: "three"
},
{
name: "aa",
swp: "bb"
}
];
Run Code Online (Sandbox Code Playgroud)
随着Array.prototype.filter我可以做
x.filter(function(y){ return y.name == "two"; });
Run Code Online (Sandbox Code Playgroud)
但是,这将只返回两个对象中的一个,这两个对象在其任何属性中都具有"两个"值.
而
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;
}
Run Code Online (Sandbox Code Playgroud)
做的工作,但是一种蛮力的方法.有没有更好的方法来实现相同的结果?
var arrOfObj = []; // objects you're sifting
var prop = 'whatever';
var matches = arrOfObj.filter(obj => Object.keys(obj).some(k => obj[k] === prop));
Run Code Online (Sandbox Code Playgroud)
你想要一个组合,Array.prototype.filter并且Array.prototype.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;
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |