gpt4 book ai didi

javascript - 从数组中删除不匹配的对 javascript

转载 作者:行者123 更新时间:2023-12-02 18:38:42 25 4
gpt4 key购买 nike

我想从当前数组中删除孤儿(不匹配对):

J01171 01/11/2012 08:03:34 J01171 Bath Rd Ipswich Reconnected  
J01171 01/11/2012 08:04:34 J01171 Bath Rd Ipswich Isolated by OTU Fault
J01171 01/11/2012 08:04:47 J01171 Bath Rd Ipswich Reconnected
J01171 02/01/2013 15:46:22 J01171 Bath Rd Ipswich Isolated by OTU Fault
J01171 02/01/2013 15:46:36 J01171 Bath Rd Ipswich Reconnected
J01171 01/02/2013 18:12:43 J01171 Bath Rd Ipswich Isolated by OTU Fault
J01171 01/02/2013 18:42:32 J01171 Bath Rd Ipswich Reconnected
J01181 10/12/2012 13:13:13 J01181 BathRd LeighRd Isolated by Fault
J01181 10/12/2012 15:30:01 J01181 BathRd LeighRd Reconnected
J01181 09/02/2013 00:43:00 J01181 BathRd LeighRd Isolated by OTU Fault
J01181 09/02/2013 00:47:57 J01181 BathRd LeighRd Reconnected
J01181 09/02/2013 00:49:00 J01181 BathRd LeighRd Isolated by OTU Fault

删除孤儿后,输出应如下所示:

J01171 01/11/2012 08:04:34 J01171 Bath Rd Ipswich Isolated by OTU Fault   
J01171 01/11/2012 08:04:47 J01171 Bath Rd Ipswich Reconnected
J01171 02/01/2013 15:46:22 J01171 Bath Rd Ipswich Isolated by OTU Fault
J01171 02/01/2013 15:46:36 J01171 Bath Rd Ipswich Reconnected
J01171 01/02/2013 18:12:43 J01171 Bath Rd Ipswich Isolated by OTU Fault
J01171 01/02/2013 18:42:32 J01171 Bath Rd Ipswich Reconnected
J01181 10/12/2012 13:13:13 J01181 BathRd LeighRd Isolated by Fault
J01181 10/12/2012 15:30:01 J01181 BathRd LeighRd Reconnected
J01181 09/02/2013 00:43:00 J01181 BathRd LeighRd Isolated by OTU Fault
J01181 09/02/2013 00:47:57 J01181 BathRd LeighRd Reconnected

对于所有 Assets 代码,排序数组中的所有元素都成对“隔离 - 重新连接”。但是,该数组有一些 Assets 代码的孤儿:顶部有不匹配的“Reconnected”(因为它的“Isolated”对已留在其他日志文件中),底部有不匹配的“Isolated” (因为它的“重新连接”对将出现在未来的日志文件中)。我的任务是摆脱所有孤儿。我在这里只放置了 2 个 Assets 代码,但实际上数百(甚至可能是数千) Assets 代码,数组中有 50 万个元素,因此有数百个孤儿。

孤儿也可能出现在 Assets 代码的中间。基本上,可能存在这样的情况:在任何给定的 Assets 代码中间三个“隔离”会相互跟随。我需要在第一个“Isolated”之后删除后续的“Isolated”,因为它还没有得到它的对。例如,

X00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Isolated    
X00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Isolated [NEEDS TO BE REMOVED]
X00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Isolated [NEEDS TO BE REMOVED]
X00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Reconnected
J00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Isolated
J00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Isolated [NEEDS TO BE REMOVED]
J00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Reconnected
J00000 dd/mm/yyyy hh:mm:ss X00000 qwerty Reconnected [NEEDS TO BE REMOVED]

有什么想法可以解决这个问题吗?提前致谢。

最佳答案

我认为这符合你的要求:

isolated = {} 

result = data.reduce(function(buf, line) {
var m = line.match(/(^[A-Z]\d{5}).*?(Reconnected|Isolated)/);
var asset = m[1], event = m[2];

if(event == "Reconnected" && asset in isolated) {
buf[isolated[asset]] = buf[isolated[asset]].substr(1);
delete isolated[asset];
buf.push(line);
} else if(event == "Isolated") {
isolated[asset] = buf.push("?" + line) - 1;
}
return buf;
}, []). filter(function(line) {
return line.charAt(0) != "?";
})

这个想法是跟踪“隔离”的线路,并在找到匹配的“重新连接”后“恢复”清理。请注意,此代码不需要“隔离”后立即“重新连接”,并且可以处理来自不同 Assets 的混合输出的日志。

完整的 fiddle :http://jsfiddle.net/evY8B/

关于javascript - 从数组中删除不匹配的对 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17046972/

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