gpt4 book ai didi

javascript - 使用带有通配符的数组有效地查找数组中的数组

转载 作者:行者123 更新时间:2023-12-03 04:58:44 25 4
gpt4 key购买 nike

我有一个以下形式的数组对象数组:

[[eventID, IP, timestamp], [eventID, IP, timestamp]... ]

我经常收到一个相同格式的新数组对象([eventID、IP、时间戳])。

我需要检查主数组中是否存在具有相同 eventID/IP 对(很有可能)但不匹配时间戳的现有对象。

显然我可以遍历列表,首先检查 eventID,然后检查 IP,但这似乎......不优雅。我可以使用indexOf,但我不完全确定数组中用于匹配数组中元素的通配符元素的语法。

在主数组中搜索 [eventID、IP、WILDCARD] 的最有效方法是什么?

最佳答案

您可以使用两级键/值结构进行快速查找。传统上,人们会使用普通对象来做到这一点,但从 ES6 开始,建议使用 Map 对象来实现这种动态增长的结构。

例如,您可以使用一个充当二维哈希(eventId 和 IP)的对象,该对象公开 get 和 set 方法,内部使用嵌套的 Map 对象:

function EventHash() {
var hash = new Map;

this.set = function (eventId, IP, timestamp) {
if (!hash.has(eventId)) hash.set(eventId, new Map);
hash.get(eventId).set(IP, timestamp);
return this;
};
this.get = function (eventId, IP) {
if (hash.has(eventId)) return hash.get(eventId).get(IP);
}
}

// Demo
var hash = new EventHash();

hash.set(1, '123.123.123.123', 11111);
hash.set(1, '555.555.555.555', 22222);
hash.set(2, '555.555.555.555', 33333);
console.log(hash.get(1, '123.123.123.123')); // 1111
hash.set(1, '123.123.123.123', 44444);
console.log(hash.get(1, '123.123.123.123')); // 4444
console.log(hash.get(5, '123.123.123.123')); // does not exist
console.log(hash.get(1, '')); // does not exist

关于javascript - 使用带有通配符的数组有效地查找数组中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42322231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com