【发布时间】:2017-10-02 08:09:29
【问题描述】:
我目前正在做一个项目,我需要比较这两个数组并过滤掉房间名称相同的数组;
(例如;A420.2 - 0h 53 m(来自 vacant -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 - 0h 34 m 和 FRAMIA250.1 - 3h 34 m。过滤出具有相同名称的第二个(FRAMIA250.1 - 3h 34 m)直到第一个(FRAMIA250.1 - 0h 34 m)的时间到期的最有效方法是什么?
澄清;当时间到期时,它不再显示过滤数组中的元素。
【问题讨论】:
-
这些不是有效的数组
-
@Weedoze 我已将这些元素推送到这些数组中,booked.push(resource.code);
-
你的数组中需要
吗?这是计算相似度的额外开销。
标签: javascript arrays list compare