概念性问题这里,当使用Javascript通过值从集合中删除项时,实现这一点的更好的方法是什么?
假设:
function arrayRemove(arr, value) {
return arr.filter(function(ele){
return ele != value;
});
var array = ['a', 'b', 'c', 'd'];
就是简单地使用
var result = arrayRemove(array, 'b');
比事先检查它的存在更合适
if (array.includes('b'))
var result = arrayRemove(array, 'b');
第一个是更干净和更少的操作,但后者并不总是触发筛选器。
发布于 2019-06-06 02:53:44
为此,我创建了一个JS perf。看起来在检查值是否存在之前直接调用arrayRemove
函数会更好。
一个简单的测试:
const arr = Array(10000000).fill(Math.random());
arr[10000] = 'e';
let start = Date.now();
const arr2 = arr.filter(v => v !== 'd');
console.log('filter time', Date.now() - start); // --- filter time 1168ms
start = Date.now();
if (arr.includes('e')) {
console.log('includes time', Date.now() - start); // --- includes time 1ms
}
所以你可以看到,如果数组真的很大,速度会快得多
发布于 2019-06-06 02:48:33
我会说var result = arrayRemove(array, 'b');
更好,因为这是:
if (array.includes('b'))
将遍历数组,如果找到b
,则如下所示:
var result = arrayRemove(array, 'b');
将再次迭代数组以移除它,因此如果元素存在,则有两次迭代,如果元素不存在,则有一次迭代。直接使用arrayRemove(array, 'b')
在两种情况下都只迭代一次。
发布于 2019-06-06 02:46:00
更好的做法是使用内置方法,提供splice()
此方法用于向数组添加项/从数组中删除项,并将从数组中返回已删除的项。你可以在这里了解更多关于Splice的信息。Splice
https://stackoverflow.com/questions/56466263
复制相似问题