如何检查数组是否包含指定元素?JScript中indexOf/includes报错问题
JScript数组检查元素报错:indexOf/includes无法使用
问题场景
在Directory Opus的JScript脚本中,尝试使用indexOf()或includes()检查数组元素时,均报错Object doesn't support this property or method (0x800a01b6),代码示例:
function OnTestCmd(scriptCmdData){ print(["Jenny", "Matilda", "Greta"].indexOf("Matilda")) //Error: Object doesn't support this property or method (0x800a01b6) print(["Jenny", "Matilda", "Greta"].includes("Matilda")) //Error: Object doesn't support this property or method (0x800a01b6) arr = new Array("Jenny", "Matilda", "Greta") print(arr.indexOf("Greta")) //Error: Object doesn't support this property or method (0x800a01b6) } function print(str){ DOpus.Output(str) }
注:print函数仅封装DOpus.Output(),功能正常。
原因
当前使用的JScript环境(如Directory Opus内置引擎)属于旧版本,未实现ES6的includes()方法,甚至ES5的indexOf()也可能未被原生支持,导致调用报错。
解决方案
方案1:手动实现数组包含检查函数
无需依赖原生方法,自己遍历数组判断:
// 自定义数组包含检查函数 function arrayContains(arr, targetItem) { for (var i = 0; i < arr.length; i++) { if (arr[i] === targetItem) { return true; } } return false; } function OnTestCmd(scriptCmdData){ var arr = new Array("Jenny", "Matilda", "Greta"); print(arrayContains(arr, "Matilda")); // 输出true print(arrayContains(arr, "Greta")); // 输出true print(arrayContains(arr, "Unknown")); // 输出false } function print(str){ DOpus.Output(str); }
方案2:给Array原型添加indexOf polyfill
如果需要使用indexOf()的返回索引功能,可以给Array原型补全该方法:
// 仅当原生indexOf不存在时添加polyfill if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(targetItem) { for (var i = 0; i < this.length; i++) { if (this[i] === targetItem) { return i; } } return -1; // 未找到返回-1 }; } function OnTestCmd(scriptCmdData){ var arr = new Array("Jenny", "Matilda", "Greta"); print(arr.indexOf("Matilda")); // 输出1 print(arr.indexOf("Greta")); // 输出2 print(arr.indexOf("Unknown")); // 输出-1 } function print(str){ DOpus.Output(str); }
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

