2015-01-12 23 views
2

我想要查找某個元素(可能是字符串或數字)是否在數組中。該陣列是test,元素是value。到目前爲止好,我有這樣的代碼:toString()爲JavaScript中的數組的每個元素

function compare(value, test) { 
    // We need to stringify all the values to compare them with a string 
    return test.map(function(value){ 
    return value.toString(); 
    }).indexOf(value) > -1; 
    } 
alert(compare("2", [1, 2, 3])); 
alert(compare("2", ["1", "2", "3"])); 

It does work。但由於indexOf()uses strict equality這不符合我的需求,所以看起來很複雜。一個哈克方式將做以下,這也適用:

return test.join("|").split("|").indexOf(value) > -1; 

但是它是簡單的看,如果測試是["a", "b|c", "d"]那麼我們有一個問題,因爲我們會被比較abc & d而不是a,b|c, d。找到安全字符也不是一種選擇,所以此解決方案無效。 有沒有更簡單的方法做indexOf()正常相等

編輯:我第一次嘗試這樣做,它出人意料地返回false從嚴格的平等,這就是爲什麼我做了它的複雜的方式:

["1", "2", "3"].indexOf(2); 
+0

你'compare'功能看起來好像沒什麼問題,而不是在所有的複雜,我不明白你爲什麼會需要去改變它? – adeneo

+0

'arr.map(String).indexOf(「3」);'在原始文件(: –

回答

1

你可以做類似下面的?

function compare(value, test) { 
    return test.indexOf(Number(value)) > -1 || 
     test.indexOf(String(value)) > -1; 
} 
alert(compare("2", [1, 2, 3])); 
alert(compare("2", ["1", "2", "3"])); 

另一種方法是使用Array.prototype.some

function compare(value, test) { 
    var num = Number(value), 
     str = String(value); 

    return test.some(function(val) { 
    return val === num || val === str; 
    }); 
} 
alert(compare("2", [1, 2, 3])); 
alert(compare("2", ["1", "2", "3"])); 
相關問題