JavaScript - 删除两个数组之间的多个相同值

标签 javascript arrays object filter compare

我目前正在编写一段代码,我需要比较两个数组并删除多个具有相同名称的元素。这是数组;

vacant = [
"FRAMIA420.2 - 0h 36 m",
"FRAMIA510.4 - 0h 36 m",
"FRAMIA320.7 - 0h 36 m",
"FRAMIA520.7 - 0h 36 m",
"FRAMIA450.3 - 1h 36 m",
"FRAMIA350.1 - 2h 21 m",
"FRAMIA210.2 - 2h 21 m",
"FRAMIA340.2 - 2h 36 m"]

booked = [
"FRAMIA440.5 - 13h 0 m",
"FRAMIA540.2 - 3h 45 m",
"FRAMIA340.2 - 5h 45 m",
"FRAMIA250.1 - 3h 45 m",
"FRAMIA420.2 - 3h 45 m",
"FRAMIA540.1 - 13h 0 m",
"FRAMIA520.5 - 3h 45 m",
"FRAMIA240.4 - 3h 45 m",
"FRAMIA510.2 - 7h 0 m",
"FRAMIA510.4 - 2h 45 m",
"FRAMIA520.7 - 2h 45 m",
"FRAMIA450.1 - 1h 45 m",
"FRAMIA450.3 - 2h 0 m"]

所以这两个数组之间相似的元素是:FRAMIA420.2, FRAMIA510.4, FRAMIA520.7, FRAMIA450 .3FRAMIA340.2

我已经过滤掉了元素的时间戳部分,所以我只需要比较名称部分;

var firstPart = [];
vacant.forEach(function (obj1) {
    firstPart.push(obj1.substring(0, obj1.indexOf('-')))
});
booked.forEach(function (obj2) {
    var c = firstPart.indexOf(obj2.substring(0, obj2.indexOf('-')));
});

最终结果应该是这样的,只留下 vacant 数组中的元素,与 booked 数组没有相似之处:

FRAMIA320.7 - 0h 36 m
FRAMIA350.1 - 2h 21 m
FRAMIA210.2 - 2h 21 m

请注意,数组之间的相似度每天都在变化,有时可能有 2 个相似元素,而其他日子可能有 8 个或更多。

有什么快速有效的方法吗?

最佳答案

您可以在 booked 数组中构造一个包含所有姓名的列表,然后遍历空数组,检查该姓名是否在已预订姓名列表中。

vacant = [
  "FRAMIA420.2 - 0h 36 m",
  "FRAMIA510.4 - 0h 36 m",
  "FRAMIA320.7 - 0h 36 m",
  "FRAMIA520.7 - 0h 36 m",
  "FRAMIA450.3 - 1h 36 m",
  "FRAMIA350.1 - 2h 21 m",
  "FRAMIA210.2 - 2h 21 m",
  "FRAMIA340.2 - 2h 36 m"
]

booked = [
  "FRAMIA440.5 - 13h 0 m",
  "FRAMIA540.2 - 3h 45 m",
  "FRAMIA340.2 - 5h 45 m",
  "FRAMIA250.1 - 3h 45 m",
  "FRAMIA420.2 - 3h 45 m",
  "FRAMIA540.1 - 13h 0 m",
  "FRAMIA520.5 - 3h 45 m",
  "FRAMIA240.4 - 3h 45 m",
  "FRAMIA510.2 - 7h 0 m",
  "FRAMIA510.4 - 2h 45 m",
  "FRAMIA520.7 - 2h 45 m",
  "FRAMIA450.1 - 1h 45 m",
  "FRAMIA450.3 - 2h 0 m"
]

function getName(str) {
  return str.substring(0, str.indexOf('-'));
}

var bookedNames = [];
booked.forEach(function (bookedStr) {
  bookedNames.push(getName(bookedStr))
});

var uniqueVacant = [];
vacant.forEach(function (vacantStr) {
  var vacantName = getName(vacantStr);
  if (!bookedNames.includes(vacantName))
    uniqueVacant.push(vacantStr)
});
console.log(uniqueVacant);

关于JavaScript - 删除两个数组之间的多个相同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43888210/

相关文章:

javascript - 异步/等待上传任务

arrays - Swift 数组总是给我 "fatal error: Array index out of range"

arrays - 如何使 Dart 中的数组(列表)元素唯一?

javascript - 尝试将动画重构为类对象,如何构造其相互关联的部分

javascript - 如何使 Chart JS 中的两条线变粗

javascript - JS : Remove everything after nth interation of chacter

javascript - 使功能同步工作(等待本地事件被触发)

javascript - 从多个选项中获取所有变化

c++ - 如何在运行时从 Windbg 扩展中的 DMP 文件获取类型信息?

javascript - 确定 javascript 对象上的所有属性是否为 null 或空字符串