我们有一个如下的对象数组
var myArr = [ {name: "john", age: 23},
{name: "john", age: 43},
{name: "jim", age: 101},
{name: "bob", age: 67} ];
如何使用lodash获取myArr中name为john的对象列表?
我们有一个如下的对象数组
var myArr = [ {name: "john", age: 23},
{name: "john", age: 43},
{name: "jim", age: 101},
{name: "bob", age: 67} ];
如何使用lodash获取myArr中name为john的对象列表?
使用lodash的_.filter
方法:
_.filter(collection, [predicate=_.identity])
遍历集合中的元素,返回谓词函数返回 truthy 值的所有元素所组成的数组。谓词函数接受三个参数:(value, index|key, collection)。
使用自定义函数作为谓词
_.filter(myArr, function(o) {
return o.name == 'john';
});
带有谓词作为过滤对象的一部分(_.matches
迭代器速记法)
_.filter(myArr, {name: 'john'});
使用谓词 [key, value] 数组作为参数(即_.matchesProperty
迭代器的简写形式)。
_.filter(myArr, ['name', 'John']);
Lodash有一个“map”函数,它的工作方式就像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)
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)
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);
通过名称、年龄进行过滤,同时您也可以使用map函数。
map和filter的区别
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);
<div data-lang="js" data-hide="false" data-console="true" data-babel="false" class="snippet">
<div class="snippet-code">
<pre class="snippet-code-js lang-js prettyprint-override"><code>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");
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);
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" })
可以像这样结合过滤器和包含来查看选项是否包含特定字符串(在此示例中为answerQuery)
return filter(answerOptions, (option) => {
return includes(option.label.toLowerCase(), answerQuery.toLowerCase());
});