使用IF语句的最佳方式

时间:2018-05-25 07:21:42

标签: javascript performance

假设我在AG-Grid中有10列,我需要根据几个条件将某些列字段更新为不可编辑。

以下代码有效,但我想以更好的方式进行。

注意:只有点击事件我才能获得列ID。

 if (event.column.colId === 'xxx' || event.column.colId === 'yyy' || event.column.colId === 'xx' || event.column.colId === 'yy'
        || event.column.colId === 'dd' || event.column.colId === 'mm' || event.column.colId === 'yy' || event.column.colId === 'cc' || event.column.colId === 'vv') {
        event.colDef.editable = false;
      }

3 个答案:

答案 0 :(得分:4)

您可以使用需要比较的值创建数组,然后使用indexOf()数组方法检查event.column.colId是否具有数组中指定的值。

var match = ['xxx', 'yyy', 'xx', 'yy', 'dd', 'mm', 'cc', 'vv']; 
if (match.indexOf(event.column.colId) !== -1) {
    event.colDef.editable = false;
}

你也可以使用if(match.includes(event.column.colId))返回一个布尔值,但includes()在IE浏览器中不起作用,所以我建议使用indexOf()

  

indexOf()方法返回第一次出现的指定值的调用String对象中的索引,从fromIndex开始搜索。如果找不到值,则返回-1

答案 1 :(得分:1)

此作业的更合适的集合可能是Set。在大多数情况下,单独的性能差异不应该让您感到烦恼,但是这个集合通常会被实现为哈希表,因此对于大型集合而言更具性能(假设在每次迭代中不对其进行初始化,疗程)。

尽管如此,它在语义上是用于存储唯一值的正确集合,并且更清楚地展示了您的意图恕我直言。

用法非常简单:

const match = new Set(['xxx', 'yyy', 'xx', 'yy']);

// O(1) time complexity, most likely
if (match.has('yy')) {
     // do stuff
}

如果您不想使用Set或者需要在不使用polyfill的情况下支持旧浏览器,则可以使用普通的js对象来获得相同的散列性能优势:

function init(a) {
  var result = {};
  for (var i = 0, length = a.length; i < length; i++) {
    result[a[i]] = true;
  }
  return result;
}

var match = init(['xxx', 'yyy', 'xx', 'yy']);
if (match.hasOwnProperty('yy')) {
    // do stuff
}

答案 2 :(得分:0)

您可以使用数组:

const colIds = ['xxx', 'yyy', 'xx', 'yy']; //etc.

if (colIds.indexOf(event.column.colId) > -1) {
  event.colDef.editable = false;
}