Javascript 字符串是。。。惯例

Javascript 字符串是。。。惯例,javascript,arrays,Javascript,Arrays,假设我们不做我想做的事情,即实现Array.prototype.has(),那么下面的约定是什么 if (['contacts','calendar','tasks','inbox'].indexOf(kind)!==-1) { 我不喜欢的是==-1,但我也不喜欢数组 我曾经使用String.prototype.inList(list,)来计算分隔符(如果没有提供的话) 请原谅我悲叹基于零的数组与真实性的冲突。没有indexOf和的情况下,有没有什么鬼鬼祟祟的方法可以做到这一点==-1,我想我

假设我们不做我想做的事情,即实现
Array.prototype.has()
,那么下面的约定是什么

if (['contacts','calendar','tasks','inbox'].indexOf(kind)!==-1) {
我不喜欢的是
==-1
,但我也不喜欢数组

我曾经使用
String.prototype.inList(list,)
来计算分隔符(如果没有提供的话)

请原谅我悲叹基于零的数组与真实性的冲突。没有
indexOf
的情况下,有没有什么鬼鬼祟祟的方法可以做到这一点==-1
,我想我可以说
indexOf(kind)+1
来获得真实性。还有什么

编辑:
要完善我正在寻找的内容--是一种处理“列表中的是字符串”的方法,但以文字方式(快速、肮脏、简写)处理,而不是以
list
是数组的方式处理,也不是以
find.inList(list)
这样的变量处理。我对原型解决方案持开放态度,但对像
~'abc'.split('').indexOf(abc)
这样的创造性黑客更感兴趣。因此,可能
String.prototype.hasItem(find,)
,以便
'abc'.hasItem(abc)
将数组变成一个对象,数组成员作为键,任何值都是(true)

然后您可以执行“如果(实物在obj中)”


还有一个很好的优点是O(1)查找时间而不是O(n)

我很久以前就写过这篇文章了,idk如果这有帮助的话。(ES6中重写的箭头函数被注释掉)


if(~[a,b,c].indexOf(d))
,但是
if([a,b,c].some(is(d))
怎么样,其中
is=x=>y=>x==y
在ES7
数组中。prototype.includes
存在,它将返回一个布尔值。因此您不必使用`.indexOf()!==-```.Polyfill:这也是indexof类型运算符在许多其他语言中的行为。这是一个公认的方法convention@Edwin
包括
?他们一定是在为自己的钱跑
getElementsByTagName
。我很惊讶他们没有给它命名
isContainingMemberLike
@Edwin-你为什么不写y我们的评论作为答案?
Array.prototype.includes = function(element) {
    return this.some(function(el) {
        return (typeof el == "string") ? el.includes(element) : el === element;
    });
    // ES6 Arrow Functions
    // return this.some(el => (typeof el == "string") ? el.includes(element) : el === element);
}

String.prototype.containsAll = function(arr, index){
    return arr.every(function(el){
        return this.includes(el, index);
    }, this);
    // ES6 Arrow Functions
    // return arr.every(el => this.includes(el, index), this);
}

String.prototype.contains = function(arr, index) {
    return arr.some(function(el){
        return this.includes(el, index);
    }, this);
    // ES6 Arrow Functions
    // return arr.some(el => this.includes(el, index), this);
}