Cách hiệu quả nhất để tìm ra 1 obj
nếu một mảng JavaScript chứa một obj
là gì? Hiện tại tôi đang sử dụng:
function contains(a, obj) {
for (var i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
Liệu có cách tốt hơn và ngắn hơn để thực hiện việc này?
Bạn biết ai đó có thể trả lời câu hỏi này?. Bạn có thể giúp đỡ bằng cách tìm những người giỏi nhất:
Dùng 1 dòng:
function contains(arr, x) {
return arr.filter(function(elem) { return elem == x }).length > 0;
}
Tôi có cách này cho bạn:
Array.prototype.contains = function (v) {
return this.indexOf(v) > -1;
}
var a = [ 'foo', 'bar' ];
a.contains('foo'); // true
a.contains('fox'); // false
Đóng góp nhỏ của tôi:
function isInArray(array, search)
{
return array.indexOf(search) >= 0;
}
//usage
if(isInArray(my_array, "my_value"))
{
//...
}
Dưới đây là một đoạn sử dụng Array.indexOf
trong Javascript 1.6 :
if (!Array.indexOf)
{
Array.indexOf = [].indexOf ?
function (arr, obj, from) { return arr.indexOf(obj, from); }:
function (arr, obj, from) { // (for IE6)
var l = arr.length,
i = from ? parseInt( (1*from) + (from<0 ? l:0), 10) : 0;
i = i<0 ? 0 : i;
for (; i<l; i++) {
if (i in arr && arr[i] === obj) { return i; }
}
return -1;
};
}
Bạn có thể thử cách sau, update cách của bạn :
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
và bây giờ có thể sử dụng nó như sau:
alert([1, 2, 3].contains(2)); // => true
alert([1, 2, 3].contains('2')); // => false