如何在js中使用带有箭头功能的2个条件使用对象的过滤器数组?

时间:2019-02-19 08:11:59

标签: javascript lodash arrow-functions

假设我有一个像这样的数组:

  const items=[{
        "taskType": "type2",
        "taskName": "two",
        "id": "19d0da63-dfd0-4c00-a13a-cc822fc81298"
      },
      {
        "taskType": "type1",
        "taskName": "two",
        "id": "c5385595-2104-409d-a676-c1b57346f63e"
      }]

我想拥有一个箭头(过滤器)功能,该功能返回除taskType = type2和taskName = two之外的所有项目。因此,在这种情况下,它仅返回第二项?

2 个答案:

答案 0 :(得分:2)

您可以尝试在Array.prototype.filter()

中否定条件

const items=[{
        "taskType": "type2",
        "taskName": "two",
        "id": "19d0da63-dfd0-4c00-a13a-cc822fc81298"
      },
      {
        "taskType": "type1",
        "taskName": "two",
        "id": "c5385595-2104-409d-a676-c1b57346f63e"
      }]

var res = items.filter(task => !(task.taskType == 'type2' && task.taskName == 'two'));

console.log(res);

答案 1 :(得分:1)

您可以使用lodash的_.reject()。使用一个对象作为谓词,并定义要拒绝的属性和值:

const items= [{
  "taskType": "type2",
  "taskName": "two",
  "id": "19d0da63-dfd0-4c00-a13a-cc822fc81298"
},
{
  "taskType": "type3",
  "taskName": "two",
  "id": "19d0da63-dfd0-4c00-a13a-cc822fc81298"
},
{
  "taskType": "type1",
  "taskName": "two",
  "id": "c5385595-2104-409d-a676-c1b57346f63e"
}]

const result = _.reject(items, { taskType: "type2", taskName: "two" });

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>