首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript数组中,是否应该在删除值之前检查其值?

在Javascript数组中,是否应该在删除值之前检查其值?
EN

Stack Overflow用户
提问于 2019-06-06 02:40:05
回答 4查看 75关注 0票数 1

概念性问题这里,当使用Javascript通过值从集合中删除项时,实现这一点的更好的方法是什么?

假设:

代码语言:javascript
复制
function arrayRemove(arr, value) {   
   return arr.filter(function(ele){       
      return ele != value;
});

var array = ['a', 'b', 'c', 'd'];

就是简单地使用

代码语言:javascript
复制
var result = arrayRemove(array, 'b');

比事先检查它的存在更合适

代码语言:javascript
复制
if (array.includes('b')) 
    var result = arrayRemove(array, 'b');

第一个是更干净和更少的操作,但后者并不总是触发筛选器。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-06-06 02:53:44

为此,我创建了一个JS perf。看起来在检查值是否存在之前直接调用arrayRemove函数会更好。

一个简单的测试:

代码语言:javascript
复制
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
}

所以你可以看到,如果数组真的很大,速度会快得多

https://jsperf.com/js-array-filter/1

票数 1
EN

Stack Overflow用户

发布于 2019-06-06 02:48:33

我会说var result = arrayRemove(array, 'b');更好,因为这是:

代码语言:javascript
复制
if (array.includes('b'))

将遍历数组,如果找到b,则如下所示:

代码语言:javascript
复制
var result = arrayRemove(array, 'b');

将再次迭代数组以移除它,因此如果元素存在,则有两次迭代,如果元素不存在,则有一次迭代。直接使用arrayRemove(array, 'b')在两种情况下都只迭代一次。

票数 1
EN

Stack Overflow用户

发布于 2019-06-06 02:46:00

更好的做法是使用内置方法,提供splice()此方法用于向数组添加项/从数组中删除项,并将从数组中返回已删除的项。你可以在这里了解更多关于Splice的信息。Splice

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56466263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档