我在请求中包含一个字符串,该字符串可以包含多个单词,如果字符串中的任何逗号分隔值是 在数组列表中返回true。我下面的代码抛出错误:
原型不存在
main.ts
const ContentList = ["check", "string", "in", "the", "array"]
private ValidateRequestArgs(str) {
let arr = new Array();
arr = ContentList;
arr.prototype.contains = function(str) {
return this.indexOf(str) > -1;
};
}
this.validateRequestArgs("check,string");
答案 0 :(得分:0)
您要解决的问题需要以下功能。但是我不确定您想要的是什么,因为它与您编写的功能无关。
NLS_LANG="ENGLISH_UNITED KINGDOM.AL32UTF8"
答案 1 :(得分:0)
虽然实际答案是“因为arr
是实例,而不是对象定义”,但此处的实际要点信息更为重要,因此请继续阅读。
JavaScript是一种原型继承语言,这意味着可以使用new
实例化任何带有原型的实例,并且所有这些实例都引用了单个权威的原型。实例很多,但只有一个原型。访问与实际对象函数关联的原型需要使用.prototype
,通过特定实例访问它需要使用__proto__
,但是任一访问器都返回相同的原型。因此,您不能做的一件事就是“向实例的原型添加一些东西”,因为没有“实例”原型,您将为该类型的对象修改通用原型。但是,您可以参考它:对其进行修改,对其进行修改。因此,其他所有内容仍与同一原型相关。您刚刚修改的。对于一切。
您想要的 外观是让arr
具有一个函数.contains()
,因此,如果是这样,只需按字面意思即可:
arr.contains = function(...) { ...}
arr
仍然是一个JavaScript对象,您可以根据需要动态添加许多属性。
但是接下来我们要做的是:但是不要这样做,因为标准JS已经允许您编写符合您的要求的代码。从根本上讲,没有理由编写一个函数然后将其附加到您正在使用的对象实例上。
您显然正在使用现代JS,因此假设性能不是问题,则可以使用已经可用的标准JS数组函数:
const ContentList = ["check", "string", "in", "the", "array"]
// let's check some content
let inputFromSomewhere = "check,string,where";
let arr = inputFromSomewhere.split(',');
// if there can be spaces around the commas, then you'll
// need to split on "comma possibly surrounded by spaces":
//
// let arr = inputFromSomewhere.split(/\s*,\s*/);
// check which terms are in the list
let yesno = arr.map(v => ContentList.indexOf(v)>-1);
// yesno is now an array of true/false values
// check whether all terms are in the list:
let allPresent = list.reduce((a,v) => a && v);
// allPresent is a single true/false value
// we can even do this in one step:
allPresent = arr.every(v => ContentList.indexOf(v)>-1);
以此类推。数组原型已经具有 ton 个函数,以使所有这些工作成为可能,而不必编写污染原型的内容,因此请转到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array,花10、15分钟阅读提供的功能(因为可能您可能不知道的吨数已经存在)和您的编程游戏=)
答案 2 :(得分:-1)
要回答您的问题,因为您试图将原型设置在没有原型的数组实例上,而不是在没有原型的Array对象上。
忽略该示例的其他问题,为数组提供一个contains()方法,请在您的初始化代码中执行此操作...
Array.prototype.contains = function(str) {
return this.indexOf(str) > -1;
}
现在,要做我想做的事情(问题尚不清楚),您需要这样的事情
const contentList = ["check", "string", "in", "the", "array"];
function validateRequestArgs(args) {
args = args.split(',');
for (var i = 0; i < args.length; i++) {
if (!contentList.contains(args[i])) return false; // word not in list
}
return true;
}
validateRequestArgs("check,string") // returns true
validateRequestArgs("not,this") // returns false