如何过滤对象数组中的所有属性?

时间:2017-10-07 08:24:36

标签: javascript lodash

假设我有一个这样的数组:

  const people = [
    {
       "name":"pete22",
       "age":56
    },
    {
       "name":"sonya56",
       "age":22
    }
    ]

我可以通过名称过滤lodash:

let result = people.filter(person =>_.includes(person.name,'56')
//{'name':'sonya56'}

如果我想在任何财产中归还所有“56”的人怎么办?所以在上面的例子中它会让两个人都回归?我正在寻找一个紧凑的解决方案,也许是lodash?

6 个答案:

答案 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#filterObject.valuesArray#map与字符串一起使用,并与Array#someArray#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)