使用基于属性值的lodash过滤对象数组

sar*_*ake 52 javascript filtering filter lodash

我们有一个对象数组

var myArr = [ {name: "john", age:23}
              {name: "john", age:43}
              {name: "jim", age:101}
              {name: "bob", age:67} ];
Run Code Online (Sandbox Code Playgroud)

如何从myArr获取对象列表,其名称是john与lodash?

Env*_*off 111

使用lodash _.filter方法:

_.filter(collection, [predicate=_.identity])
Run Code Online (Sandbox Code Playgroud)

迭代集合的元素,返回所有元素的数组谓词返回truthy.使用三个参数调用谓词:(value,index | key,collection).

谓词作为自定义函数

 _.filter(myArr, function(o) { 
    return o.name == 'john'; 
 });
Run Code Online (Sandbox Code Playgroud)

谓词作为过滤对象的一部分(_.matchesiteratee简写)

_.filter(myArr, {name: 'john'});
Run Code Online (Sandbox Code Playgroud)

谓词为[key,value]数组(_.matchesPropertyiteratee简写.)

_.filter(myArr, ['name', 'John']);
Run Code Online (Sandbox Code Playgroud)

  • 指向文档的链接会有所帮助:https://lodash.com/docs/4.17.4#filter (4认同)
  • 您应该提到使用_.matchesProperty iteratee简写的示例仅适用于lodash v4.对于lodash v3,它没有数组括号. (3认同)
  • 过滤器在ES5 +中不带lodash即可工作。 (2认同)

Dus*_*ant 23

Lodash有一个"map"功能,就像jQuerys一样:

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)
Run Code Online (Sandbox Code Playgroud)

  • lodash _.filter 方法是最正确的答案,因为它执行 OP 要求删除未定义的步骤。 (2认同)

Yuc*_*uci 10

使用lodash

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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

原生 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);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Nve*_*yan 6

**按姓名、年龄过滤**也可以使用地图功能

地图和过滤器的区别

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

2. filter - 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);
Run Code Online (Sandbox Code Playgroud)


Nve*_*yan 5

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");
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)


Nve*_*yan 5

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);
Run Code Online (Sandbox Code Playgroud)


Copyright Info

© Copyright 2013-2021 admin@qa.1r1g.com

如未特别说明,本网站的内容使用如下协议:
Creative Commons Atution-NonCommercial-ShareAlike 4.0 International license
.

用以下方式浏览
回到顶部