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?


197

Tôi đang làm việc với Titanium, mã của tôi trông như thế này:

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 đang truyền một chỉ mục cho mảng currentData. Tôi vẫn không thể phát hiện phần tử không tồn tại bằng cách sử dụng mã ở trên.


1
Logic của bạn sai. Bạn cần liên từ ( &&) giữa các điều kiện riêng.
JK

Câu trả lời:


380

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

I E

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

4
+1, tốt đẹp. Bạn cũng có thể sử dụng if(arrayName[index] === 'undefined')làm lối tắt
AnchovyLegend

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

18
Điều này không thành công, nếu vật phẩm ở đó, nhưng giá trị của nó không được xác định; thay vào đó hãy sử dụng câu trả lời này -> stackoverflow.com/questions/1098040/ từ
Matus

như @Matus đã nói, có nhiều lời giải thích ở đây , bạn nên chú ý.
S.Thiongane

1
for if (ArrayName [index] === không xác định) bạn có thể sử dụng thậm chí ngắn hơn đó là if (! ArrayName [index])
Park JongBum 17/07/18

84
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

4
Theo tôi đây là câu trả lời tốt nhất, đến bây giờ IE 7 không còn được duy trì nữa nên nó không phải là vấn đề. Mặc dù tôi sẽ đề nghị sử dụng bộ ba bằngif(myArray.indexOf(searchTerm) === -1)
Mauro Gava

2
OP đang tìm kiếm để xem liệu chỉ số đã cho có tồn tại không. Đây là kiểm tra nếu một giá trị nhất định tồn tại.
jonathan.s

6

Ai đó làm ơn sửa tôi nếu tôi sai, nhưng AFAIK sau đây là đúng:

  1. Mảng thực sự chỉ là Đối tượng dưới vỏ bọc của JS
  2. Vì vậy, họ có phương thức nguyên mẫu hasOwnProperty"kế thừa" từObject
  3. trong thử nghiệm của tôi, hasOwnPropertycó thể kiểm tra nếu có bất cứ thứ gì tồn tại ở một chỉ mục mảng.

Vì vậy, miễn là điều trên là đúng, bạn có thể chỉ cần:

const arrayHasIndex = (array, index) => Array.isArray(array) && array.hasOwnProperty(index);

sử dụng:

arrayHasIndex([1,2,3,4],4); đầu ra: false

arrayHasIndex([1,2,3,4],2); đầu ra: true


Điều này cũng hoạt động cho các giá trị không xác định và null trong mảng, điều mà không có câu trả lời nào khác ở đây làm.
Jake Thakur

Được xác minh từ MDN: "Nếu một đối tượng là một mảng, phương thức hasOwnProperty có thể kiểm tra xem một chỉ mục có tồn tại hay không." developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
Khăn

3

Tôi đã phải gói câu trả lời của techfoobar trong một khối try.. catchnhư 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 đi nữa (nếu không, mã đã dừng với một lỗi).


Điều này chỉ nên "bị hỏng" với một lỗi nếu arrayNamechính biến (hoặc index) không tồn tại. Chỉ cần truy cập một phần tử mảng không xác định sẽ không dẫn đến "lỗi"?
MrWhite

3

Nếu các phần tử của mảng cũng là các đối tượng hoặc mảng đơn giản, bạn có thể sử dụng một số hàm:

// 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;
    }
});

somelà cách hiện đại nhất ở đây Nó thậm chí có thể trở thành một lớp lót giống nhưmyArray.some(el => el.item === element.item && el.title === element.title)
vahdet

2

Xét 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 trong a hay không, chỉ cần kiểm tra nó với in:

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

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

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

2

var fruits = ["Banana", "Orange", "Apple", "Mango"];
if(fruits.indexOf("Banana") == -1){
    console.log('item not exist')
} else {
	console.log('item exist')
}


1

Nếu bạn sử dụng underscore.js thì các loại kiểm tra null và không xác định sẽ bị thư viện ẩ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;

Bây giờ có vẻ dễ đọc hơn nhiều.


Ngay cả khi 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 phụ thuộc underscore.js chỉ để kiểm tra giá trị trống. Chỉ cần thực hiện một hàm bao bọc đơn giản ngay bây giờ (v) {return (typeof v! == 'không xác định'); }
Heroselohim

1

Cách đơn giản để kiểm tra vật phẩm có 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")

3
không hiệu quả khủng khiếp. Nếu tôi đặt myArray[1000000] = 'Pear'thì chức năng của bạn sẽ mất mãi mãi.
John Henckel

1

Cách này là 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ó lẽ Một cách khác để làm điều đó là.

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

1
var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(ArrayIndexValue in demoArray){
   //Array index exists
}else{
   //Array Index does not Exists
}

Bạn đang mong đợi điều gì .. câu hỏi thực sự là gì?
Geeky

1

Nếu bạn đang tìm kiếm một số thứ như thế này.

Đây là đoạn trích sau đây

var demoArray = ['A','B','C','D'];
var ArrayIndexValue = 2;
if(demoArray.includes(ArrayIndexValue)){
alert("value exists");
   //Array index exists
}else{
alert("does not exist");
   //Array Index does not Exists
}


Đây là giải pháp tôi sẽ sử dụng im dự án của tôi ngày hôm nay. Tôi không biết tại sao lại có downvote - cái này hoạt động tốt nhất cho trường hợp sử dụng của tôi, đó là node.js / express phía máy chủ. Cảm ơn bạn
mkrufky

@mkrufky vì đó không phải là câu hỏi này. từ lâu chúng ta đã có khả năng Array.includeskiểm tra xem giá trị có phải là một mảng không, như thế nào demoArray.indexOf(ArrayIndexValue) !== -1. câu hỏi này là về việc kiểm tra xem chỉ mục có tồn tại trong mảng hay không, đây là một vấn đề hoàn toàn khác
r3wt

0

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

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

3
Sai lầm. Điều gì sẽ xảy ra nếu tmp = [0,0,0,0]sau đó tmp [3] nên tồn tại
John Henckel

0
(typeof files[1] === undefined)?
            this.props.upload({file: files}):
            this.props.postMultipleUpload({file: files widgetIndex: 0, id})

Kiểm tra xem mục thứ hai trong mảng không được xác định bằng cách sử dụng typeofvà kiểm traundefined


0

Khi cố gắng tìm hiểu xem một chỉ mục mảng có tồn tại trong JS hay không, cách dễ nhất và ngắn nhất để làm điều đó là thông qua phủ định kép.

let a = [];
a[1] = 'foo';
console.log(!!a[0])   // false
console.log(!!a[1])   // true

0

Đây là chính xác những gì các innhà điều hành là cho. Sử dụng nó như thế này:

if (index in currentData) 
{ 
    Ti.API.info(index + " exists: " + currentData[index]);
}

Các câu trả lời được chấp nhận là sai, nó sẽ cho một âm tính giả nếu giá trị tại indexundefined:

const currentData = ['a', undefined], index = 1;

if (index in currentData) {
  console.info('exists');
}
// ...vs...
if (typeof currentData[index] !== 'undefined') {
  console.info('exists');
} else {
  console.info('does not exist'); // incorrect!
}


0
const arr = []

typeof arr[0] // "undefined"

arr[0] // undefined

Nếu biểu thức boolean

typeof arr[0] !== typeof undefined

là đúng thì 0 được chứa trong mảng


0

Điều này cũng hoạt động tốt, thử nghiệm theo loại chống lại undefined.

if (currentData[index] === undefined){return}

Kiểm tra:

const fruits = ["Banana", "Orange", "Apple", "Mango"];

if (fruits["Raspberry"] === undefined){
  console.log("No Raspberry entry in fruits!")
}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.