字符串是......约定

时间:2015-05-10 01:15:48

标签: javascript arrays

假设我们没有做我想要做的事情来实现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>)

2 个答案:

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