假设我们没有做我想要做的事情来实现Array.prototype.has()
,那么下面的约定是什么......
if (['contacts','calendar','tasks','inbox'].indexOf(kind)!==-1) {
我不喜欢的是!==-1
,但我也不喜欢这个阵列。
我曾经使用String.prototype.inList(list,<delimiter>)
,如果没有提供,它实际上会计算分隔符。
请原谅我对基于零的数组和真实性的冲突表示哀叹。在没有indexOf
和!==-1
的情况下,是否有一些偷偷摸摸的做法,我想我可以说indexOf(kind)+1
来获得真实性。还有什么?
编辑:
要改进我正在寻找的东西 - 是一种处理&#34;是列表中的字符串&#34;的方法,但是以字面方式(快速,脏,简写)而不是{{1}的方式}是一个数组,或者在list
之类的变量中。我对原型解决方案持开放态度,但对find.inList(list)
等创造性黑客更感兴趣。所以也许~'a b c'.split(' ').indexOf(abc)
以便String.prototype.hasItem(find,<delimiter>)
答案 0 :(得分:2)
将数组转换为一个对象,数组成员为键,任意值(true)。
然后你可以做&#34; if(在obj中的种类)&#34;
还具有O(1)查找时间而不是O(n)
的优点答案 1 :(得分:0)
我很久以前写过这个,如果这有帮助的话,请等一下。 (在ES6中重写箭头功能已被注释掉)
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);
}