我目前正在编写一段代码,我需要比较两个数组并删除多个具有相同名称的元素。这是数组;
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 .3 和FRAMIA340.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/