没有财产的lodash?

时间:2018-04-03 16:26:58

标签: javascript lodash

我正在尝试使用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项。我有什么不对吗?谢谢你的建议。

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:

&#13;
&#13;
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;
&#13;
&#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>