2012-10-28 26 views
116

tôi đang làm việc với titan,Làm cách nào để kiểm tra xem phần tử mảng có tồn tại hay không trong javascript?

mã của tôi trông giống như như,

var currentData = new Array(); 

if(currentData[index]!==""||currentData[index]!==null||currentData[index]!=='null') 
{ 
    Ti.API.info("is exists " + currentData[index]); 
    return true; 
} 
else 
{ 
    return false; 
} 

tôi đi qua chỉ số để mảng currentData,

Đối với yếu tố không tồn tại, tôi vẫn không thể phát hiện ra nó sử dụng trên mã

+1

Logic của bạn là sai. Bạn cần liên kết ('&&') giữa các điều kiện riêng lẻ. –

Trả lời

200

sử dụng typeof arrayName[index] === 'undefined'

tức

if(typeof arrayName[index] === 'undefined') { 
    // does not exist 
} 
else { 
    // does exist 
} 
+3

+1, đẹp. Bạn cũng có thể sử dụng 'if (arrayName [index] === 'undefined')' như một phím tắt – AnchovyLegend

+44

@AnchovyLegend no, bạn không thể! Nhưng bạn có thể sử dụng 'if (arrayName [index] === undefined)'. –

+10

điều này không thành công, nếu mục là có, nhưng giá trị của nó là không xác định; sử dụng câu trả lời này thay vì -> http: // stackoverflow.com/questions/1098040/check-if-an-array-key-tồn tại-trong-a-javascript-đối tượng-hoặc-mảng – Matus

2

tôi phải quấn câu trả lời techfoobar trong một try .. catch khối, như vậy:

try { 
    if(typeof arrayName[index] == 'undefined') { 
    // does not exist 
    } 
    else { 
    // does exist 
    } 
} 
catch (error){ /* ignore */ } 

... đó là cách nó hoạt động trong chrome, dù sao (nếu không, mã dừng lại với một lỗi).

58
var myArray = ["Banana", "Orange", "Apple", "Mango"]; 

if (myArray.indexOf(searchTerm) === -1) { 
    console.log("element doesn't exist"); 
} 
else { 
    console.log("element found"); 
} 
+2

Thật không may, cái này không hoạt động trong IE 7 trở xuống. – darksoulsong

+2

Điều này theo ý kiến ​​của tôi là câu trả lời hay nhất, hiện tại IE 7 không được bảo trì nữa nên không phải là vấn đề. Mặc dù tôi sẽ đề nghị sử dụng ba bằng 'if (myArray.indexOf (searchTerm) === -1)' –

1

Nếu bạn sử dụng underscore.js thì loại kiểm tra không xác định và không xác định này sẽ bị ẩn bởi thư viện.

Vì vậy, mã của bạn sẽ trông như thế này -

var currentData = new Array(); 

if (_.isEmpty(currentData)) return false; 

Ti.API.info("is exists " + currentData[index]); 

return true; 

Có vẻ nhiều hơn nữa có thể đọc được bây giờ.

+0

Thậm chí nếu câu trả lời của bạn là đúng, tôi sẽ chỉ nghĩ hai lần cho việc này. Mã của bạn sẽ trở thành underscore.js chỉ phụ thuộc vào việc kiểm tra một giá trị rỗng. Chỉ cần làm một hàm wrapper đơn giản isset (v) {return (typeof v! == 'undefined'); } – Heroselohim

2

Nếu các yếu tố của mảng cũng là những vật thể đơn giản hoặc mảng, bạn có thể sử dụng some chức năng:

// search object 
var element = { item:'book', title:'javasrcipt'}; 

[{ item:'handbook', title:'c++'}, { item:'book', title:'javasrcipt'}].some(function(el){ 
    if(el.item === element.item && el.title === element.title){ 
     return true; 
    } 
}); 

[['handbook', 'c++'], ['book', 'javasrcipt']].some(function(el){ 
    if(el[0] == element.item && el[1] == element.title){ 
     return true; 
    } 
}); 
2

bạn có thể chỉ cần sử dụng này:

var tmp = ['a', 'b']; 
index = 3 ; 
if(tmp[index]){ 
    console.log(tmp[index] + '\n'); 
}else{ 
    console.log(' does not exist'); 
} 
2

Hãy xem xét những mảng a:

var a ={'name1':1, 'name2':2} 

Nếu bạn muốn kiểm tra xem 'name1' có tồn tại không, chỉ cần kiểm tra với in:

if('name1' in a){ 
console.log('name1 exists in a') 
}else 
console.log('name1 is not in a') 
+3

"var a" không phải là đối tượng mảng trong trường hợp của bạn, mà là đối tượng thông thường. Nên là var a = [...]. Tôi nghĩ đây là tác giả cần thiết. – tomazahlin

+0

Đây là cách kiểm tra sự tồn tại của một khóa trong một đối tượng, không phải là sự hiện diện của một chỉ mục trong một mảng. – Beejamin

3

Đây là cách dễ nhất theo ý kiến ​​của tôi.

var nameList = new Array('item1','item2','item3','item4'); 

// Using for loop to loop through each item to check if item exist. 

for (var i = 0; i < nameList.length; i++) { 
if (nameList[i] === 'item1') 
{ 
    alert('Value exist'); 
}else{ 
    alert('Value doesn't exist'); 
} 

Và có thể Một cách khác để làm điều đó là.

nameList.forEach(function(ItemList) 
{ 
    if(ItemList.name == 'item1') 
     { 
      alert('Item Exist'); 
     } 
} 
2

Cách đơn giản để kiểm tra hàng tồn tại hay không

Array.prototype.contains = function(obj) { 
    var i = this.length; 
    while (i--) 
     if (this[i] == obj) 
     return true; 
    return false; 
} 

var myArray= ["Banana", "Orange", "Apple", "Mango"]; 

myArray.contains("Apple")