我尝试使用lodash的函数without根据对象的属性从数组中排除对象,如下所示:
我的数组:
let arr = [
{code: '001', data: 'foo data 1'},
{code: '002', data: 'foo data 2'},
{code: '003', data: 'foo data 3'},
{code: '004', data: 'foo data 4'}]函数用法:
_.without(arr, {code: '002'})我期望该函数从数组中排除代码为002的项,但总是给我全部4个项。我做错了什么吗?谢谢你的建议。
发布于 2018-04-04 00:39:00
您可以使用_.reject:
let arr = [
{code: '001', data: 'foo data 1'},
{code: '002', data: 'foo data 2'},
{code: '003', data: 'foo data 3'},
{code: '004', data: 'foo data 4'}]
arr = _.reject(arr, {code: '002'});
console.log(JSON.stringify(arr))<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
发布于 2018-04-04 00:39:59
您可以使用
let newArr = _.filter(arr, function(obj) {
return obj.code !== "002";
});shorter使用箭头函数:
let newArr = _.filter(arr, obj => obj.code !== "002");注意:如果您希望更改原始数组,而不是创建新数组,则使用并将测试从obj.code !== "002"更改为obj.code === "002"。
发布于 2018-04-04 00:52:46
Lodash有一个像jQuerys一样工作的"map“函数:
let arr = [
{code: '001', data: 'foo data 1'},
{code: '002', data: 'foo data 2'},
{code: '003', data: 'foo data 3'},
{code: '004', data: 'foo data 4'}];
var data1 = _.map(arr, function(o) {
if (o.code == "002") return o;
});
// Remove undefines from the array
data1 = _.without(data1, undefined)
或者您可以使用lodash _.filter方法:
_.filter(collection, [predicate=_.identity])
迭代集合的元素,返回所有元素的数组,谓词返回truthy for。使用三个参数调用谓词:(value,index|key,collection)。
将谓词作为自定义函数
_.filter(arr, function(o) {
return o.code == '002';
});
将谓词作为过滤对象的一部分( _.matches iteratee简写)
_.filter(arr, {code: '002'});
以谓词为键,值数组( _.matchesProperty迭代器的简写形式。)
_.filter(arr, ['code', '002']);
https://stackoverflow.com/questions/49634901
复制相似问题