Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数组中删除所有出现的值的最快方法是拼接还是过滤速度更快?_Javascript - Fatal编程技术网

Javascript 从数组中删除所有出现的值的最快方法是拼接还是过滤速度更快?

Javascript 从数组中删除所有出现的值的最快方法是拼接还是过滤速度更快?,javascript,Javascript,就像: array.filter(i => i !== item) 这会比这样的速度更快吗 var i = array.length; while (i--) { if (array[i] === item) { array.splice(array.indexOf(item), 1); } } 当看表演的时候。我想删除一个数组中同一事物的多个实例算法上,过滤器应该获胜;它执行单个读写过程,按顺序在上构建单个新

就像:

array.filter(i => i !== item) 
这会比这样的速度更快吗

var i = array.length;

    while (i--) {
        if (array[i] === item) {
            array.splice(array.indexOf(item), 1);
        }
    }
当看表演的时候。我想删除一个数组中同一事物的多个实例

算法上,过滤器应该获胜;它执行单个读写过程,按顺序在上构建单个新阵列。不管发生什么情况,splice都必须执行相同的读取量,写入功将匹配,只需在数组的开头拼接出一个匹配值,如果它占用数组的前两个元素,则几乎是原来的两倍,等等。考虑到更多的元素实例会减少后续拼接的工作量,实际上可能不是完全On²,但您很快就会看到由n个匹配元素组成的数组,后跟n个必须被n个拼接复制n次的非匹配元素的有效On²行为

至于在实践中哪个更快,您必须进行测试,但对于大型阵列,我肯定会默认使用过滤器。只有在内存非常宝贵的情况下,拼接才应该获胜,避免复制可能会产生非常不寻常的影响。

从算法上讲,过滤器应该获胜;它执行单个读写过程,按顺序在上构建单个新阵列。不管发生什么情况,splice都必须执行相同的读取量,写入功将匹配,只需在数组的开头拼接出一个匹配值,如果它占用数组的前两个元素,则几乎是原来的两倍,等等。考虑到更多的元素实例会减少后续拼接的工作量,实际上可能不是完全On²,但您很快就会看到由n个匹配元素组成的数组,后跟n个必须被n个拼接复制n次的非匹配元素的有效On²行为


至于在实践中哪个更快,您必须进行测试,但对于大型阵列,我肯定会默认使用过滤器。splice应该只在内存非常宝贵的少数情况下获胜,避免复制可能会带来非常不寻常的不同。

为什么不是你自己?为什么不是你自己?关于内存,我想这甚至只适用于OP可能使用的基本值,对象只会复制它们的引用,与新数组相比,没有太大的内存影响。@kaido:即使是引用也会累加起来;这可能不是一个很大的百分比增长,但在64位系统上1000万个引用指针仍然是80 MB的内存,这可能是压垮骆驼的稻草,导致交换/页面文件活动以RAM速度的一小部分速度进行。关于内存,我想这甚至只适用于OP可能正在使用的基本值,对象只需复制其引用,与新数组相比,不会对内存造成太大影响。@kaido:即使引用也会累积起来;这可能不是一个很大的百分比增长,但在64位系统上,1000万个引用指针仍有80MB的内存,这可能是压垮骆驼的一根稻草,导致交换/页面文件活动的速度只有RAM速度的一小部分。。