Javascript 从数组中删除某些值的最快方法

Javascript 从数组中删除某些值的最快方法,javascript,arrays,Javascript,Arrays,我有一个如下所示的数组: const data = [ ['Wed Sep 20 09:00:00 GMT+02:00 2017', 'SKYSCANNER', '04b073133c7843248a7a3dbc968f75a0', 'network1', 'affiliate', 1141338.0, 18164.0, 0.08, 0.07, 0.62, 0.06, 0.0138, 0.0738, 0.465, 0.10695, 0.57195, 0.0525, 0.

我有一个如下所示的数组:

const data =  [
    ['Wed Sep 20 09:00:00 GMT+02:00 2017', 'SKYSCANNER', '04b073133c7843248a7a3dbc968f75a0', 'network1', 'affiliate',
        1141338.0, 18164.0, 0.08, 0.07, 0.62, 0.06, 0.0138, 0.0738, 0.465, 0.10695, 0.57195, 0.0525, 0.012075, 0.064575],
    ['Wed Sep 20 09:00:00 GMT+02:00 2017', 'SKYSCANNER', '4420cc109ec54214b68edc906b18e44a', 'network1', 'affiliate',
        1141338.0, 18164.0, 0.75, 0.67, 5.58, 0.5625, 0.129375, 0.691875, 4.185, 0.96255, 5.14755, 0.5025, 0.115575, 0.618075],
    ['Wed Sep 20 09:00:00 GMT+02:00 2017', 'SKYSCANNER', '90a7cbf1cf4e4043889626c4119d4b4d', 'network1', 'affiliate',
        1141338.0, 18164.0, 0.08, 0.07, 0.62, 0.06, 0.0138, 0.0738, 0.465, 0.10695, 0.57195, 0.0525, 0.012075, 0.064575],
    ['Wed Sep 20 09:00:00 GMT+02:00 2017', 'SKYSCANNER', '0f04f1ff385541d3a8d9ea2f0d85482b', 'network1', 'affiliate',
        1141338.0, 18164.0, 0.08, 0.07, 0.62, 0.06, 0.0138, 0.0738, 0.465, 0.10695, 0.57195, 0.0525, 0.012075, 0.064575],
    ['Wed Sep 20 09:00:00 GMT+02:00 2017', 'SKYSCANNER', '0f04f1ff385541d3a8d9ea2f0d85482b', 'network1', 'affiliate',
        1232113, 1232133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];
我想要实现的(但不知道如何实现)是删除所有看起来像此数组中最后一个的条目(以最快的方式),例如
[Wed Sep 20 09:00:00 GMT+02:00 2017,SKYSCANNER,0f04f1ff385541d3a8d9ea2f0d85482b,network1,附属,1232113,1232133,0,0,0,0,0,0,0,0,0]

基本上,如果第8位之后的所有值都为零,则不需要输入,必须删除

通常在我的例子中,这样的数组可以有5-15k个条目,所以我想知道实现这一点的最快方法是什么?有人能提供一个工作片段吗


谢谢

在我的旧机器上,以下操作需要11毫秒。正如Cerburs所写,只需使用过滤器,15k并不多:

const数据=[
['Wed Sep 20 09:00:00 GMT+2017年02:00'、'SKYSCANNER'、'04b073133c7843248a7a3dbc968f75a0'、'network1'、'affiliate',
1141338.0, 18164.0, 0.08, 0.07, 0.62, 0.06, 0.0138, 0.0738, 0.465, 0.10695, 0.57195, 0.0525, 0.012075, 0.064575],
[Wed Sep 20 09:00:00 GMT+2017年02:00]、“SKYSCANNER”、“4420cc109ec54214b68edc906b18e44a”、“network1”、“附属公司”,
1141338.0, 18164.0, 0.75, 0.67, 5.58, 0.5625, 0.129375, 0.691875, 4.185, 0.96255, 5.14755, 0.5025, 0.115575, 0.618075],
[Wed Sep 20 09:00:00 GMT+2017年2:00]、“SKYSCANNER”、“90a7cbf1cf4e4043889626c4119d4b4d”、“network1”、“附属公司”,
1141338.0, 18164.0, 0.08, 0.07, 0.62, 0.06, 0.0138, 0.0738, 0.465, 0.10695, 0.57195, 0.0525, 0.012075, 0.064575],
[Wed Sep 20 09:00:00 GMT+2017年02:00]、“SKYSCANNER”、“0f04f1ff385541d3a8d9ea2f0d85482b”、“network1”、“附属公司”,
1141338.0, 18164.0, 0.08, 0.07, 0.62, 0.06, 0.0138, 0.0738, 0.465, 0.10695, 0.57195, 0.0525, 0.012075, 0.064575],
[Wed Sep 20 09:00:00 GMT+2017年02:00]、“SKYSCANNER”、“0f04f1ff385541d3a8d9ea2f0d85482b”、“network1”、“附属公司”,
1232113, 1232133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];
设test=[];
对于(设i=0;i<3000;i+=1){
test=test.concat(数据);
}
const start=performance.now();
常量结果=test.filter(
//拒绝输入,如果没有
//从第8位到最后一位的每个值
//是0
(entry)=>!entry.slice(8).every((val)=>0==val)
);

log(performance.now()-start)如果需要快速代码,只需检查单独的值

or(
|
)将短路,因此
e[7]
-
e[18]
中具有值的第一个条目将使该行通过测试,这意味着
过滤器将移到下一行

const数据=[
[Wed Sep 20 09:00:00 GMT+2017年2:00]、“SKYSCANNER”、“04b073133c7843248a7a3dbc968f75a0”、“network1”、“附属公司”、“1141338.0、18164.0、0.08、0.07、0.62、0.06、0.0138、0.465、0.10695、0.57195、0.0525、0.012075、0.064575],
['Wed Sep 20 09:00:00 GMT+2017年2:00'、'SKYSCANNER'、'4420cc109ec54214b68edc906b18e44a'、'network1'、'affiliate'、1141338.0、18164.0、0.75、0.67、5.58、0.5625、0.129375、0.691875、4.185、0.96255、5.14755、0.5025、0.115575、0.618075],
[Wed Sep 20 09:00:00 GMT+2017年02:00]、“SKYSCANNER”、“90a7cbf1cf4e4043889626c4119d4b4d”、“network1”、“附属公司”、1141338.0、18164.0、0.08、0.07、0.62、0.06、0.0138、0.465、0.10695、0.57195、0.0525、0.012075、0.064575],
[Wed Sep 20 09:00:00 GMT+2017年02:00”,“SKYSCANNER”,“0f04f1ff385541d3a8d9ea2f0d85482b”,“network1”,“附属公司”,1141338.0,18164.0,0.08,0.07,0.62,0.06,0.0138,0.465,0.10695,0.57195,0.0525,0.012075,0.064575],
['Wed Sep 20 09:00:00 GMT+2017年02:00','SKYSCANNER','0f04f1ff385541d3a8d9ea2f0d85482b','network1','affiliate',1232113,1232133,0,0,0,0,0,0,0,0,0,0,0,0]
];
设test=[];
对于(设i=0;i<3000;i+=1){
test=test.concat(数据);
}
const start=performance.now();
const result=test.filter(e=>e[7]| e[8]| e[9]| e[10]| e[11]| e[12]| e[13]| e[14]| e[15]| e[16]| e[17]| e[18]);

log(performance.now()-start)“最快”取决于具体情况。做一些修改并运行一个基准测试。你有没有检查过任何简单的过滤方法是否很慢?@Yoshi,是的,但我不知道如何应用它。每个内部数组的长度都一样吗?@Evantimboli是的,这个长度总是一样的