我目前正在一個項目中工作,在那裏我需要比較這兩個數組並篩選出具有相同房間名稱的數組;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); –
你需要陣列中的
嗎?這是計算相似性的額外開銷。 –