基于属性值的 LODASH 对象数组过滤

我们有这样一个对象数组

var myArr = [ {name: "john", age: 23},
{name: "john", age: 43},
{name: "jim", age: 101},
{name: "bob", age: 67} ];

如何从 myArr 中获得名称为 john 的对象列表?

191840 次浏览

Lodash 有一个类似 jQuery 的“ map”函数:

var myArr =  [{ name: "john", age:23 },
{ name: "john", age:43 },
{ name: "jimi", age:10 },
{ name: "bobi", age:67 }];


var johns = _.map(myArr, function(o) {
if (o.name == "john") return o;
});


// Remove undefines from the array
johns = _.without(johns, undefined)

使用 loash _.filter方法:

_.filter(collection, [predicate=_.identity])

对集合元素进行迭代,返回所有元素谓词的数组将返回。谓词由三个参数调用: (value,index | key,Collection).

以谓词作为自定义函数

 _.filter(myArr, function(o) {
return o.name == 'john';
});

使用谓词作为筛选对象 (_.matches迭代器简写)的一部分

_.filter(myArr, {name: 'john'});

谓词为[ key,value ] array (_.matchesProperty迭代器的简写)

_.filter(myArr, ['name', 'John']);

参考文献: https://lodash.com/docs/4.17.4#filter

let myArr = [
{ name: "john", age: 23 },
{ name: "john", age: 43 },
{ name: "jim", age: 101 },
{ name: "bob", age: 67 },
];


let list = _.filter(myArr, item => item.name === "john");

浪荡:

const myArr = [ {name: "john", age: 23},
{name: "john", age: 43},
{name: "jim", age: 101},
{name: "bob", age: 67} ];


const johnArr = _.filter(myArr, person => person.name === 'john');
console.log(johnArr)

enter image description here

香草 JavaScript:

const myArr = [ {name: "john", age: 23},
{name: "john", age: 43},
{name: "jim", age: 101},
{name: "bob", age: 67} ];


const johnArr = myArr.filter(person => person.name === 'john');
console.log(johnArr);

enter image description here

Loash 还有一个删除方法

var myArr = [
{ name: "john", age: 23 },
{ name: "john", age: 43 },
{ name: "jim", age: 101 },
{ name: "bob", age: 67 }
];


var onlyJohn = myArr.remove( person => { return person.name == "john" })

let myArr = [
{ name: "john", age: 23 },
{ name: "john", age: 43 },
{ name: "jim", age: 101 },
{ name: "bob", age: 67 },
];


// this will return old object (myArr) with items named 'john'
let list = _.filter(myArr, item => item.name === 'jhon');


//  this will return new object referenc (new Object) with items named 'john'
let list = _.map(myArr, item => item.name === 'jhon').filter(item => item.name);

根据名字,年龄过滤 还可以使用 map 函数

映射与滤波器的区别

1.Map -map ()方法创建一个新数组,其结果是调用每个数组元素的函数。Map 方法允许根据用户的首选项操作数组中的项,并在一个全新的数组中返回所选操作的结果。例如,考虑以下数组:

2.Filter -filter ()方法创建一个数组,其中包含通过由提供的函数实现的测试的所有数组元素。过滤器方法非常适合于用户必须标识数组中具有共同特征的某些项的特定实例。例如,考虑以下数组:

const users = [
{ name: "john", age: 23 },
{ name: "john", age:43 },
{ name: "jim", age: 101 },
{ name: "bob", age: 67 }
];


const user = _.filter(users, {name: 'jim', age: 101});
console.log(user);

可以执行类似的操作,将 filter 与 include 组合起来,以查看该选项是否包含特定的字符串(本例中为 response erQuery)

  return filter(answerOptions, (option) => {
return includes(option.label.toLowerCase(), answerQuery.toLowerCase());
});