假设我有一个这样的数组:
const people = [
{
"name":"pete22",
"age":56
},
{
"name":"sonya56",
"age":22
}
]
我可以通过名称过滤lodash:
let result = people.filter(person =>_.includes(person.name,'56')
//{'name':'sonya56'}
如果我想在任何财产中归还所有“56”的人怎么办?所以在上面的例子中它会让两个人都回归?我正在寻找一个紧凑的解决方案,也许是lodash?
答案 0 :(得分:3)
你不需要Lodash这样做,因为JavaScript原生支持做这些事情。 您需要做的是过滤人员,但也过滤条目中的每个值,例如:
const people = [{
"name": "pete22",
"age": 56
}, {
"name": "sonya56",
"age": 22
}]
// Filter your 'people' JSON
const filteredPeople = people.filter(person => {
// Filter each 'value' (property) inside each entry in 'people'
return Object.values(person).filter(value => {
// Turn a value into a string and check if it includes the value '56'
return value.toString().includes('56')
})
})
console.log(filteredPeople)
答案 1 :(得分:2)
如果我想让所有人退回' 56'在任何财产?
您需要一个包含所有此类属性的数组,您希望使用这些属性过滤输入数组。
var prop = [ "age", "size" ];
现在只需在循环中应用过滤器
var valueToMatch = "56";
result = people;
prop.forEach( function( key ){
if ( result.length ) { return true; } //if the result is already empty
result = result.filter( function( peopleObj ){
peopleObj[ key ] == valueToMatch;
});
});
result
是使用prop
数组中给出的所有属性过滤的输出数组。
答案 2 :(得分:2)
您可以将Array#filter
与Object.values
,Array#map
与字符串一起使用,并与Array#some
和Array#includes
一起使用。
const
people = [{ name: "pete22", age: 56 }, { name: "sonya56", age: 22 }],
filteredPeople = people.filter(person => Object
.values(person)
.map(String)
.some(v => v.includes('56'))
)
console.log(filteredPeople);
答案 3 :(得分:1)
停止使用lodash。
JavaScript的:
let filtered = people.filter((e) => e.name === ‘foo’ && e.age === 23);
请记住&&迫使这两个条件和||说只有其中一个必须是真的。
答案 4 :(得分:1)
任何数量的属性的扩展解决方案:
var people = [
{ "name":"pete22", "age":56 }, {"name":"sonya56", "age":22 },
{ "name":"john33", "age":33 }, {name: "mike", "login":"56mike", "code": 10 }
],
result = people.filter(function(o){
return Object.keys(o).some(function(k){ return String(o[k]).indexOf("56") !== -1; });
});
console.log(result);

答案 5 :(得分:1)
我们可以使用Object
的值再次过滤 people.filter(
hm=>Object.values(hm).filter(
vl=>(vl+'').indexOf(56)>-1).length>0)