JavaScriptで配列要素が存在するかどうかを確認するにはどうすればよいですか?


197

私は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
あなたの論理は間違っています。&&個々の条件の間に論理積()が必要です。
JK

回答:


380

使用する typeof arrayName[index] === 'undefined'

すなわち

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

4
+1、いいね。if(arrayName[index] === 'undefined')ショートカットとして使用することもできます
AnchovyLegend

66
@AnchovyLegendいいえ、できません!しかし、あなたは使うことができますif(arrayName[index] === undefined)
Denis V

18
アイテムが存在する場合、これは失敗しますが、その値は未定義です。> -代わりにこの答えを使用stackoverflow.com/questions/1098040/...
Matus

@Matusが言ったように、ここにはもっと説明ありますので、注意してください。
S.Thiongane 2014

1
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 2014年

4
私の意見ではこれが最良の答えです。現在、IE 7はもはや維持されていないため、問題はありません。トリプルイコールを使用することをお勧めしますif(myArray.indexOf(searchTerm) === -1)
Mauro Gava

2
OPは、指定されたインデックス番号が存在するかどうかを確認しようとしていました。これは、指定されたが存在するかどうかを確認しています
jonathan.s

6

私が間違っている場合は誰かが私を訂正してください。ただし、次のとおりです。

  1. 配列は実際には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値に対しても機能しますが、ここでは他の回答では機能しません。
ジェイクタクル

MDNから検証:「オブジェクトが配列の場合、hasOwnPropertyメソッドはインデックスが存在するかどうかを確認できます。」developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
ローレン

3

次のように、techfoobarの回答をtry.. catchブロックで囲む必要がありました。

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

とにかく、それがChromeでどのように機能したか(そうでなければ、コードはエラーで停止しました)。


これは、変数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
これは、配列内のインデックスの存在ではなく、オブジェクト内のキーの存在を確認する方法です。
ベン・ハル


1

underscore.jsを使用する場合、これらのタイプのnullおよび未定義のチェックはライブラリによって非表示になります。

したがって、コードは次のようになります-

var currentData = new Array();

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

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

return true;

読みやすくなりました。


あなたの答えが正しいとしても、私はこれについて二度考えます。コードは、空の値をチェックする場合にのみunderscore.jsに依存するようになります。単純なラッパー関数を実行するisset(v){return(typeof v!== 'undefined'); }
ヒーローセロヒム2014年

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'、あなたの機能は永遠にかかります。
ジョンヘンケル2018

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
}

何を期待していますか?実際に質問は何ですか?
オタク

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
}


これは私が今日私のプロジェクトで使用するソリューションです。なぜ反対票があったのかわかりません-これは私のユースケース(サーバー側のnode.js / express)に最適です。ありがとう
mkrufky 2018

@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][3] tmpに続い存在している必要があります
ジョン・ヘンケル

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

を使用して配列の2番目の項目が未定義かどうか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

trueの場合、arrに0が含まれます


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.