จะตรวจสอบองค์ประกอบของอาเรย์ว่ามีอยู่หรือไม่ในจาวาสคริปต์?


198

ฉันทำงานกับ Titanium รหัสของฉันมีลักษณะดังนี้:

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

currentDataฉันกำลังผ่านดัชนีเพื่ออาร์เรย์ ฉันยังคงไม่สามารถตรวจพบองค์ประกอบที่ไม่มีอยู่โดยใช้รหัสด้านบน


1
ตรรกะของคุณผิด คุณต้องใช้ conjunctions ( &&) ระหว่างเงื่อนไขแต่ละข้อ
JK

คำตอบ:


382

ใช้ typeof arrayName[index] === 'undefined'

กล่าวคือ

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

4
+1 ดี คุณยังสามารถใช้if(arrayName[index] === 'undefined')เป็นทางลัดได้
AnchovyLegend

67
@AnchovyLegend ไม่คุณไม่สามารถ! if(arrayName[index] === undefined)แต่คุณสามารถใช้
เดนิส V

18
สิ่งนี้จะล้มเหลวหากมีรายการอยู่ แต่มีค่าไม่ถูกกำหนด ใช้คำตอบนี้แทน -> stackoverflow.com/questions/1098040/…
Matus

ตามที่ @Matus กล่าวว่ามีคำอธิบายเพิ่มเติมที่นี่คุณควรระวัง
S.Thiongane

1
for if (arrayName [index] === undefined) คุณอาจใช้อันที่สั้นกว่าซึ่งก็คือ if (! arrayName [index])
Park JongBum

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

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

2
น่าเสียดายที่อันนี้ใช้งานไม่ได้ใน IE 7 และด้านล่าง
darksoulsong

4
ในความคิดของฉันนี้เป็นคำตอบที่ดีที่สุดโดยตอนนี้ IE 7 ไม่ได้เป็น mainteined อีกต่อไปดังนั้นจึงไม่เป็นปัญหา แม้ว่าฉันจะแนะนำให้ใช้เท่ากับสามif(myArray.indexOf(searchTerm) === -1)
Mauro Gava

2
OP ต้องการตรวจสอบว่ามีหมายเลขดัชนีที่กำหนดอยู่หรือไม่ นี่คือการตรวจสอบว่ามีค่าที่กำหนดอยู่
jonathan.s

6

มีคนโปรดแก้ไขให้ฉันถ้าฉันผิด แต่AFAIKต่อไปนี้เป็นจริง:

  1. อาร์เรย์เป็นเพียง Objects ภายใต้ประทุนของ JS
  2. ดังนั้นพวกเขาจึงมีวิธีต้นแบบhasOwnProperty"สืบทอด" จากObject
  3. ในการทดสอบของฉันhasOwnPropertyสามารถตรวจสอบว่ามีสิ่งใดที่ดัชนีอาร์เรย์

ดังนั้นตราบใดที่ข้างต้นเป็นจริงคุณสามารถ:

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

การใช้งาน:

arrayHasIndex([1,2,3,4],4); เอาท์พุท: false

arrayHasIndex([1,2,3,4],2); เอาท์พุท: true


นอกจากนี้ยังใช้งานได้สำหรับค่าไม่ได้กำหนดและค่า null ในอาร์เรย์ซึ่งไม่มีคำตอบอื่นใดที่นี่ทำ
Jake Thakur

ตรวจสอบจาก MDN: "ถ้าวัตถุเป็น Array วิธี hasOwnProperty สามารถตรวจสอบว่ามีดัชนีอยู่หรือไม่" developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Loren

3

ฉันต้องห่อคำตอบของ techfoobar ในบล็อกtry.. catchเช่น:

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

... นั่นเป็นวิธีการทำงานในโครเมี่ยมอย่างไรก็ตาม (รหัสหยุดด้วยข้อผิดพลาด)


สิ่งนี้ควรมี "เสีย" โดยมีข้อผิดพลาดหากไม่มีตัวแปรarrayNameตัวเอง (หรือindex) เพียงเข้าถึงองค์ประกอบอาร์เรย์ที่ไม่ได้กำหนดไม่ควรส่งผลให้เกิด "ข้อผิดพลาด"
MrWhite

3

หากองค์ประกอบของอาร์เรย์เป็นวัตถุหรืออาร์เรย์อย่างง่ายคุณสามารถใช้ฟังก์ชั่นบางอย่างได้ :

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

someเป็นวิธีที่ทันสมัยที่สุดที่นี่ นอกจากนี้ยังสามารถเป็นแบบหนึ่งซับได้ด้วยmyArray.some(el => el.item === element.item && el.title === element.title)
vahdet

2

พิจารณาอาร์เรย์ a:

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

หากคุณต้องการตรวจสอบว่า 'name1' มีอยู่ใน a เพียงทดสอบด้วยin:

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

5
"var a" ไม่ใช่วัตถุอาร์เรย์ในกรณีของคุณ แต่เป็นวัตถุปกติ ควรเป็น var a = [... ] ฉันคิดว่านี่เป็นสิ่งที่ผู้เขียนต้องการ
tomazahlin

3
นี่คือวิธีตรวจสอบการมีอยู่ของคีย์ในวัตถุไม่ใช่การมีอยู่ของดัชนีในอาร์เรย์
Ben Hull


1

หากคุณใช้underscore.js การตรวจสอบค่า Null และการไม่ได้กำหนดประเภทนี้จะถูกซ่อนไว้โดยห้องสมุด

ดังนั้นรหัสของคุณจะเป็นแบบนี้ -

var currentData = new Array();

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

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

return true;

ดูเหมือนตอนนี้อ่านได้มากขึ้น


แม้ว่าคำตอบของคุณจะถูกต้องฉันก็แค่คิดสองครั้งสำหรับเรื่องนี้ รหัสของคุณจะกลายเป็น underscore.js ขึ้นอยู่กับการตรวจสอบค่าว่างเท่านั้น เพียงแค่ใช้ฟังก์ชัน wrapper อย่างง่าย isset (v) {return (typeof v! == 'undefined'); }
Heroselohim

1

วิธีง่ายๆในการตรวจสอบรายการที่มีอยู่หรือไม่

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
ไม่มีประสิทธิภาพอย่างน่ากลัว ถ้าฉันตั้งค่าmyArray[1000000] = 'Pear'แล้วฟังก์ชั่นของคุณจะใช้เวลาตลอดไป
John Henckel

1

วิธีนี้เป็นวิธีที่ง่ายที่สุดในความคิดของฉัน

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

และอาจจะเป็นวิธีที่จะทำก็คือ

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
}

คุณคาดหวังอะไร .. คำถามนี้จริงหรือ
Geeky

1

หากคุณกำลังมองหาบางอย่างเช่นนี้

นี่คือตัวอย่างต่อไปนี้

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
}


นี่คือทางออกที่ฉันจะใช้กับโครงการของฉันในวันนี้ ฉันไม่รู้ว่าทำไมมี downvotes - มันใช้งานได้ดีที่สุดสำหรับกรณีการใช้งานของฉันซึ่งเป็น node-side node.js / express ขอบคุณ
mkrufky

@mkrufky เพราะนั่นไม่ใช่สิ่งที่คำถามนี้มีไว้สำหรับ เราได้มีความสามารถในการนานก่อนที่จะมีการตรวจสอบว่าค่าเป็นอาร์เรย์เช่นArray.includes demoArray.indexOf(ArrayIndexValue) !== -1คำถามนี้เกี่ยวกับการตรวจสอบว่ามีดัชนีอยู่ในอาร์เรย์หรือไม่ซึ่งเป็นปัญหาที่แตกต่างอย่างสิ้นเชิง
r3wt

0

คุณสามารถใช้สิ่งนี้:

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

3
ไม่ถูกต้อง. จะเกิดอะไรขึ้นถ้าtmp = [0,0,0,0]tmp [3] น่าจะมีอยู่
John Henckel

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

ตรวจสอบว่ารายการที่สองในอาร์เรย์ไม่ได้กำหนดโดยใช้typeofและตรวจสอบundefined


0

เมื่อพยายามที่จะค้นหาว่าดัชนีอาร์เรย์มีอยู่ใน JS วิธีที่ง่ายที่สุดและสั้นที่สุดในการทำคือผ่านการปฏิเสธคู่

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

0

นี่คือสิ่งที่inผู้ประกอบการใช้ ใช้แบบนี้:

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

คำตอบที่ได้รับการยอมรับเป็นสิ่งที่ผิดก็จะให้ลบเท็จถ้าค่าที่indexเป็นundefined:

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

ถ้าบูลีนแสดงออก

typeof arr[0] !== typeof undefined

เป็นจริงแล้ว 0 มีอยู่ใน arr


0

undefinedนอกจากนี้ยังทำงานได้ดีในการทดสอบโดยแบ่งตามชนิดกับ

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

ทดสอบ:

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.