我目前正在一个项目中工作,在那里我需要比较这两个数组并筛选出具有相同房间名称的数组;JavaScript - 使用相同字符串比较两个数组
(例如; A420.2 - 0H53米(从空置 -array)和A420.2(从预订 -array))。
var vacant = [
A210.3 - 0h 53 m
,A510.2 - 0h 53 m
,A510.4 - 0h 53 m
,A340.2 - 0h 53 m
,A420.2 - 0h 53 m
,A450.1 - 1h 53 m
,A250.1 - 1h 53 m
,A520.7 - 2h 53 m
,A510.2 - 2h 53 m
,A240.2 - 2h 53 m
,A440.2 - 2h 53 m
,A350.1 - 4h 38 m
,A250.1 - 4h 53 m
,A450.3 - 4h 53 m
,A340.1 - 4h 53 m
,A320.6 - 4h 53 m
,A210.2 - 5h 38 m
,A240.2 - 6h 53 m
,A240.4 - 6h 53 m];
var booked = [
A130.1
,A420.6
,A440.5
,A540.1
,A250.1
,A350.1
,A420.2
,A510.2
,A320.6
,A320.7
,A210.2
,A220.3];
过滤后的结果应该如下所示:
var filtered = [
A210.3 - 0h 53 m
,A510.4 - 0h 53 m
,A340.2 - 0h 53 m
,A450.1 - 1h 53 m
,A250.1 - 1h 53 m
,A520.7 - 2h 53 m
,A240.2 - 2h 53 m
,A440.2 - 2h 53 m
,A450.3 - 4h 53 m
,A340.1 - 4h 53 m
,A320.6 - 4h 53 m
,A240.2 - 6h 53 m
,A240.4 - 6h 53 m];
// Filtered out: A250.1, A510.2, A210.2, A420.2, A350.1
我试过几个不同的方法,我已经从类似的问题发现了,但我没有得到我一直在寻找的结果。例如;
function arr_diff (booked, vacant) {
var a = [], diff = [];
for (var i = 0; i < booked.length; i++) {
a[booked[i]] = true;
}
for (var i = 0; i < vacant.length; i++) {
if (a[vacant[i]]) {
delete a[vacant[i]];
} else {
a[vacant[i]] = true;
}
}
for (var k in a) {
diff.push(k);
}
return diff;
};
感谢所有的答案,它真的帮助了很多,我得到了我的代码工作。无论如何,我有一个后续问题给你;
如果已过滤的数组有两个相同的名称,例如;
FRAMIA250.1 - 0h 34 m
FRAMIA450.1 - 0h 34 m
FRAMIA240.2 - 1h 34 m
FRAMIA510.2 - 1h 34 m
FRAMIA440.2 - 1h 34 m
FRAMIA520.7 - 1h 34 m
FRAMIA350.1 - 3h 19 m
FRAMIA450.3 - 3h 34 m
FRAMIA340.1 - 3h 34 m
FRAMIA250.1 - 3h 34 m
FRAMIA320.6 - 3h 34 m
FRAMIA210.2 - 4h 19 m
FRAMIA240.4 - 5h 34 m
FRAMIA240.2 - 5h 34 m
因此,我们必须在这里FRAMIA250.1 - 0H34米和FRAMIA250.1 - 3H34米。什么是最有效的方法来过滤第二个同名(FRAMIA250.1 - 3小时34米)直到时间从第一个(FRAMIA250.1 - 0小时34米)到期?
要澄清;当时间到期时,它不再显示过滤数组中的元素。
这些都是无效的数组 – Weedoze
@Weedoze我已经将这些元素推入了这些数组中,其中预订.push(resource.code); –
你需要阵列中的
吗?这是计算相似性的额外开销。 –