假设我在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;
}
答案 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;
}