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);
}