我正在尝试使用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项。我有什么不对吗?谢谢你的建议。
答案 0 :(得分:1)
你可以使用_.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>
答案 1 :(得分:0)
您可以使用_.filter
:
let newArr = _.filter(arr, function(obj) {
return obj.code !== "002";
});
使用箭头功能更短:
let newArr = _.filter(arr, obj => obj.code !== "002");
注意:如果您想更改原始数组而不是创建新数组,请使用_.remove
并将测试从obj.code !== "002"
更改为obj.code === "002"
答案 2 :(得分:0)
Lodash有一张&#34;地图&#34;功能就像jQuerys:
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)
&#13;
或者您可以使用lodash _.filter方法:
_ .filter(collection, [predicate=_.identity])
迭代集合的元素,返回所有元素的数组谓词返回truthy。使用三个参数调用谓词:(value,index | key,collection)。
将谓词作为自定义函数
_.filter(arr, function(o) {
return o.code == '002';
});
将谓词作为过滤对象的一部分(_.matches iteratee简写)
_.filter(arr, {code: '002'});
谓词为[key,value]数组(_.matchesProperty iteratee简写。)
_.filter(arr, ['code', '002']);
答案 3 :(得分:0)
您可以_.reject()
使用_.matches
iteratee简写。
const 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"}];
const result = _.reject(arr, {code: '002'});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>