javascript - ES6 数组过滤器删除常见项

标签 javascript arrays ecmascript-6 array-filter array-map

我正在尝试删除两个数组中常见的 slot_id 并构建一个不重复 slot_id 的对象数组。

尝试了以下方法,但其结果是另一个数组内的输出数组,即输出[Array(0), Array(2)]。我期望输出数组如下。

预期结果:

[{
  "_id": "5b55c44038a7701a93fb1a68",
  "end_time": {
    "hours": "01"
  },
  "start_time": {
    "hours": "00"
  }
}, {
  "_id": "5b55c44038a7701a93fb1a67",
  "end_time": {
    "hours": "03"
  },
  "start_time": {
    "hours": "01"
  }
}]

输入数组

Slots = [{
  "_id": "5b55c43532996fec4f500aa5",
  "time_slots": [{
    "_id": "5b55c43538a7701a93fb1a58",
    "end_time": {
      "hours": "01"
    },
    "start_time": {
      "hours": "00"
    }
  }, {
    "_id": "5b55c43538a7701a93fb1a57",
    "end_time": {
      "hours": "03"
    },
    "start_time": {
      "hours": "01"
    }
  }]
}, {
  "_id": "5b55c44032996fec4f500abf",
  "time_slots": [{
    "_id": "5b55c44038a7701a93fb1a68",
    "end_time": {
      "hours": "01"
    },
    "start_time": {
      "hours": "00"
    }
  }, {
    "_id": "5b55c44038a7701a93fb1a67",
    "end_time": {
      "hours": "03"
    },
    "start_time": {
      "hours": "01"
    }
  }]
}]

filterData = [{
  "slot_id": "5b55c43538a7701a93fb1a57",
  "user_id": "5b4dbbf9788bbb4fd01cea33"
}, {
  "slot_id": "5b55c43538a7701a93fb1a58",
  "user_id": "5b4dbbf9788bbb4fd01cea33"
}]

let result = Slots.map(m => m.time_slots.filter(e => !filterData.find(a => e._id == a.slot_id)));

最佳答案

使用Array.prototype.reduce()连接数组

const Slots = [{"_id":"5b55c43532996fec4f500aa5","time_slots":[{"_id":"5b55c43538a7701a93fb1a58","end_time":{"hours":"01"},"start_time":{"hours":"00"}},{"_id":"5b55c43538a7701a93fb1a57","end_time":{"hours":"03"},"start_time":{"hours":"01"}}]},{"_id":"5b55c44032996fec4f500abf","time_slots":[{"_id":"5b55c44038a7701a93fb1a68","end_time":{"hours":"01"},"start_time":{"hours":"00"}},{"_id":"5b55c44038a7701a93fb1a67","end_time":{"hours":"03"},"start_time":{"hours":"01"}}]}];

const filterData = [{"slot_id":"5b55c43538a7701a93fb1a57","user_id":"5b4dbbf9788bbb4fd01cea33"},{"slot_id":"5b55c43538a7701a93fb1a58","user_id":"5b4dbbf9788bbb4fd01cea33"}];

const result = Slots.map(m => m.time_slots.filter(e => !filterData.find(a => e._id == a.slot_id))).reduce((accumulator, currentValue) => accumulator.concat(currentValue));

document.write('<pre>' + JSON.stringify(result, null, '\t') + '</pre>')

关于javascript - ES6 数组过滤器删除常见项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51492257/

相关文章:

javascript - 使用inner.html

javascript - 使用 CSS 混合 2 个元素的背景颜色

javascript - 如何让 ESLint 在 Sublime Text 3 编辑器中运行 React + Babel?

javascript - 类应该替换 javascript 中的构造函数吗?

javascript - 如何将对象数组转换为 JSON(并返回它)?

javascript - Next.js 在启动应用程序时运行函数/脚本

java - 验证来自添加到数组中的扫描仪的用户输入

javascript - 找到出现在两个数组中的两个元素并将它们放入另一个数组中

iOS 在一个数组中搜索,通过另一个数组的索引匹配

javascript - javascript ES6 中的这个匿名 block 是什么?