web-dev-qa-db-ja.com

JSで配列項目が設定されているかどうかを確認します

配列を持っています

    var assoc_pagine = new Array();
    assoc_pagine["home"]=0;
    assoc_pagine["about"]=1;
    assoc_pagine["work"]=2;

私は試した

    if (assoc_pagine[var] != "undefined") {

しかし、それは動作していないようです

私はjqueryを使用していますが、それが役立つかどうかわかりません

ありがとう

26
Gusepo

属性がオブジェクトで定義されているかどうかをテストするには、inキーワードを使用

if (assoc_var in assoc_pagine)

OR

if ("home" in assoc_pagine)

ここにはかなりの数の問題があります。

第一に、varは変数の値が「home」、「work」、または「about」であると想定されていますか?または、「var」と呼ばれる実際のプロパティを検査するつもりでしたか?

varが文字列値を持つ変数である場合、varはJavaScriptの予約語であり、assoc_varなどの別の名前を使用する必要があることに注意してください。 。

var assoc_var = "home";
assoc_pagine[assoc_var] // equals 0 in your example

「var」というプロパティを検査する場合は、単純に引用符で囲む必要があります。

assoc_pagine["var"]

その場合、undefined"undefined"と同じではありません。オブジェクト型の文字列表現を取得するには、typeofが必要です。

これはすべてのステップの内訳です。

var assoc_var = "home"; 
var value = assoc_pagine[assoc_var]; // 0
var typeofValue = typeof value; // "number"

あなたの問題を解決するために

if (typeof assoc_pagine[assoc_var] != "undefined") 

pdate:他の回答が示しているように、arrayを使用することは、この問題の最良の解決策ではありません。代わりにObjectの使用を検討してください。

var assoc_pagine = new Object();
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;
53
Stefan
var assoc_pagine = new Array();
assoc_pagine["home"]=0;

これにはArrayを使用しないでください。配列は、数値インデックス付きリスト用です。単純なObject{})を使用するだけです。

'undefined'文字列で考えているのは、おそらく次のとおりです。

if (typeof assoc_pagine[key]!=='undefined')

これは(多かれ少なかれ)言っていることと同じです

if (assoc_pagine[key]!==undefined)

ただし、いずれにしても、これは少しいです。存在しない可能性のあるキー(これは賢明な言語ではエラーになる)を逆参照し、存在しないプロパティに特別なundefined値を与えるというJavaScriptの奇妙なハックに依存しています。

また、プロパティが実際になかったであるかどうか、または明示的にundefined値に設定されているかどうかもわかりません。

これは、より明示的で読みやすいIMOのオールラウンドなより良いアプローチです。

if (key in assoc_pagine)
12
bobince

varはステートメントです...つまり予約語です...別の方法で呼び出してください。そして、それはそれを行うより良い方法です(===は==よりも優れています)

if(typeof array[name] !== 'undefined') {
    alert("Has var");
} else {
    alert("Doesn't have var");
}
6
xavierm02

これは配列ではありません。次のように宣言してください:

var assoc_pagine = {};
assoc_pagine["home"]=0;
assoc_pagine["about"]=1;
assoc_pagine["work"]=2;

または

var assoc_pagine = {
                 home:0,
                 about:1,
                 work:2
               };

オブジェクトにラベルが含まれているかどうかを確認するには、次のようにします。

if('work' in assoc_pagine){
   // do your thing
};
3
KooiInc
if (assoc_pagine.indexOf('home') > -1) {
   // we have home element in the assoc_pagine array
}

Mozilla indexOf

1

これは私のために働いた

if (assoc_pagine[var] != undefined) {

代わりにこれ

if (assoc_pagine[var] != "undefined") {
1
antonD

TLDR;私が思いつくことのできる最良の方法はこれです:(ユースケースによっては、この機能を最適化する方法がいくつかあります。)

function arrayIndexExists(array, index){
    if ( typeof index !== 'number' && index === parseInt(index).toString()) {
        index = parseInt(index);
    } else {
        return false;//to avoid checking typeof again
    }
    return typeof index === 'number' && index % 1===0 && index >= 0 && array.hasOwnKey(index);
}

他の回答の例は近づき、いくつかの(おそらくほとんどの)目的で機能しますが、以下で説明する理由により技術的には非常に正しくありません。

Javascript配列は「数値」キーのみを使用します。配列に「連想キー」を設定すると、実際にはその配列の要素ではなく、その配列オブジェクトにプロパティを設定していることになります。たとえば、これは、Array.forEach()を使用するときに「連想キー」が繰り返されず、Array.lengthを計算するときに含まれないことを意味します。 (この例外は、「0」などの文字列は配列の要素に解決されますが、「0」などの文字列は解決されません。)

さらに、存在しない配列要素またはオブジェクトプロパティをチェックしても未定義と評価されますが、実際には配列要素またはオブジェクトプロパティがまだ設定されていないことはわかりません。たとえば、undefinedは、returnステートメントで終了しない関数を呼び出すことで得られる結果でもあります。これにより、奇妙なエラーが発生し、コードのデバッグが困難になる可能性があります。

これはわかりにくいかもしれませんが、ブラウザのjavascriptコンソールを使用して簡単に調べることができます。 (クロムを使用しました。各コメントは、その前の行の評価値を示しています。);

var foo = new Array();
foo;
//[]
foo.length;
//0
foo['bar'] = 'bar';
//"bar"
foo;
//[]
foo.length;
//0
foo.bar;
//"bar"

これは、連想キーが配列の要素にアクセスするためではなく、オブジェクトのプロパティに使用されることを示しています。

foo[0] = 0;
//0
foo;
//[0]
foo.length;
//1
foo[2] = undefined
//undefined
typeof foo[2]
//"undefined"
foo.length
//3

これは、typeofをチェックしても、要素が設定されているかどうかを確認できないことを示しています。

var foo = new Array();
//undefined
foo;
//[]
foo[0] = 0;
//0
foo['0']
//0
foo[' 0']
//undefined

これは、前述の例外と、なぜparseInt()を使用できないのかを示しています。

連想配列を使用する場合は、他の回答で推奨されているように、単純なオブジェクトを使用することをお勧めします。

1
Omn
function isset(key){
ret = false;
array_example.forEach(function(entry) {
  if( entry == key ){
    ret = true;
  }
});
return ret;
}

alert( isset("key_search") );
0
Jackson Bicalho

最も効果的な方法:

if (array.indexOf(element) > -1) {
   alert('Bingooo')
}

W3Schools

0