474

ページを初めて読み込むときは、画像が入っているかどうかを確認してimage_array、最後の画像を読み込む必要があります。

それ以外の場合は、プレビューボタンを無効にし、新しい画像ボタンを押すようにユーザーに警告し、画像を配置するための空の配列を作成します。

問題は、image_array常にelse火事の中にあるということです。配列が存在する場合-それは単にそれをオーバーライドしますが、アラートは機能しません。

if(image_array.length > 0)
    $('#images').append('<img src="'+image_array[image_array.length-1]+'" class="images" id="1" />');
else{
    $('#prev_image').attr('disabled', 'true');
    $('#next_image').attr('disabled', 'true');
    alert('Please get new image');
    var image_array = [];
}

更新htmlをロードする前に、私は次のようなものを持っています:

<?php if(count($images) != 0): ?>
<script type="text/javascript">
    <?php echo "image_array = ".json_encode($images);?>
</script>
<?php endif; ?>
4

23 に答える 23

630
if (typeof image_array !== 'undefined' && image_array.length > 0) {
    // the array is defined and has at least one element
}

暗黙のグローバル変数と変数の巻き上げが混在しているために、問題が発生している可能性があります。var変数を宣言するときは必ず次を使用してください。

<?php echo "var image_array = ".json_encode($images);?>
// add var  ^^^ here

そして、後でその変数を誤って再宣言しないようにしてください。

else {
    ...
    image_array = []; // no var here
}
于 2012-07-31T15:30:42.330 に答える
283

配列が空かどうかを確認するには

現代的な方法、ES5 +:

if (Array.isArray(array) && array.length) {
    // array exists and is not empty
}

昔ながらの方法:

typeof array != "undefined"
    && array != null
    && array.length != null
    && array.length > 0

コンパクトな方法:

if (typeof array != "undefined" && array != null && array.length != null && array.length > 0) {
    // array exists and is not empty
}

CoffeeScriptの方法:

if array?.length > 0

なんで?

Case Undefined
Undefined変数は、まだ何も割り当てていない変数です。

let array = new Array();     // "array" !== "array"
typeof array == "undefined"; // => true

ケースヌル
一般的に、ヌルは値が不足している状態です。たとえば、一部のデータを取得できなかった場合、または取得できなかった場合、変数はnullになります。

array = searchData();  // can't find anything
array == null;         // => true

配列ではない場合
Javascriptには動的型システムがあります。これは、変数が保持するオブジェクトのタイプを保証できないことを意味します。のインスタンスと話をしていない可能性がありますArray

supposedToBeArray =  new SomeObject();
typeof supposedToBeArray.length;       // => "undefined"

array = new Array();
typeof array.length;                   // => "number"

Case Empty Array
他のすべての可能性をテストしたので、のインスタンスと話しますArray。空でないことを確認するために、保持している要素の数を確認し、要素が0を超えていることを確認します。

firstArray = [];
firstArray.length > 0;  // => false

secondArray = [1,2,3];
secondArray.length > 0; // => true
于 2014-01-05T22:43:18.750 に答える
76

(ECMA 5.1)はどうですか:

if(Array.isArray(image_array) && image_array.length){
  // array exists and is not empty
}
于 2016-02-22T19:27:09.363 に答える
53

これが私が使っているものです。最初の条件はtrueをカバーし、nullとundefinedの両方があります。2番目の条件は、空の配列をチェックします。

if(arrayName && arrayName.length > 0){
    //do something.
}

またはtsemerのコメントのおかげで私は2番目のバージョンを追加しました

if(arrayName && arrayName.length)

次に、FirefoxのScratchpadを使用して、2番目の条件をテストしました。

var array1;
var array2 = [];
var array3 = ["one", "two", "three"];
var array4 = null;

console.log(array1);
console.log(array2);
console.log(array3);
console.log(array4);

if (array1 && array1.length) {
  console.log("array1! has a value!");
}

if (array2 && array2.length) {
  console.log("array2! has a value!");
}

if (array3 && array3.length) {
  console.log("array3! has a value!");
}

if (array4 && array4.length) {
  console.log("array4! has a value!");
}

これもそれを証明しif(array2 && array2.length)if(array2 && array2.length > 0)まったく同じことをしています

于 2016-06-21T20:04:11.543 に答える
32

オプションのチェーン

オプションの連鎖提案がステージ4に到達し、幅広いサポートを得ているため、これを行うための非常にエレガントな方法があります

if(image_array?.length){

  // image_array is defined and has at least one element

}
于 2020-03-19T07:21:16.220 に答える
16

次を使用する必要があります。

  if (image_array !== undefined && image_array.length > 0)
于 2012-07-31T15:21:48.113 に答える
9

画像配列変数が定義されているかどうかをテストする場合は、次のように実行できます

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}
于 2012-07-31T15:22:31.700 に答える
8

JavaScript

( typeof(myArray) !== 'undefined' && Array.isArray(myArray) && myArray.length > 0 )

Lodash&Underscore

( _.isArray(myArray) && myArray.length > 0 )
于 2018-06-08T10:38:23.243 に答える
6

jQueryを使用isEmptyObject()して、配列に要素が含まれているかどうかを確認できます。

var testArray=[1,2,3,4,5]; 
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true 

ソース:https ://api.jquery.com/jQuery.isEmptyObject/

于 2014-06-02T16:26:05.440 に答える
4

存在せずにブール値に変換しても例外が発生しない簡単な方法:

!!array

例:

if (!!arr) {
  // array exists
}
于 2017-09-24T14:35:43.810 に答える
3

undescoreまたはlodashの使用:

_.isArray(image_array) && !_.isEmpty(image_array)

于 2017-06-03T09:25:22.277 に答える
3

これはどう ?未定義の配列の長さをチェックすると、例外がスローされる場合があります。

if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}
于 2018-03-07T16:24:34.073 に答える
3

次のように確認するのが最善です。

    let someArray: string[] = [];
    let hasAny1: boolean = !!someArray && !!someArray.length;
    let hasAny2: boolean = !!someArray && someArray.length > 0; //or like this
    console.log("And now on empty......", hasAny1, hasAny2);

完全なサンプルリストを参照してください。 コードサンプル 結果

于 2020-09-21T23:52:53.387 に答える
2

私はJavascriptでこの問題にかなり遭遇します。私にとって最善の方法は、長さをチェックする前に非常に広いチェックを行うことです。nullこのQ&Aで他の解決策を見ましたが、またはundefinedまたは他の誤った値をチェックできるようにしたかったのです。

if(!array || array.length == 0){
    console.log("Array is either empty or does not exist")
}

undefinedこれにより、最初に、、、nullまたはその他の誤った値がチェックされます。これらのいずれかが当てはまる場合、これはであるため、ブール値が完成しORます。array.length次に、配列が定義されていない場合にエラーになる可能性のある、よりリスクの高いチェックをチェックできます。arrayisundefinedまたは。の場合、これに到達することはないnullため、条件の順序は非常に重要です。

于 2017-04-03T17:46:47.200 に答える
1

配列として宣言された変数がない場合は、チェックを作成できます。

if(x && x.constructor==Array && x.length){
   console.log("is array and filed");
}else{
    var x= [];
    console.log('x = empty array');
}

これは、変数xが存在するかどうかをチェックし、存在する場合は、それが塗りつぶされた配列であるかどうかをチェックします。それ以外の場合は、空の配列を作成します(または他のことを行うことができます)。

配列変数が作成されていることが確実な場合は、簡単なチェックがあります。

var x = [];

if(!x.length){
    console.log('empty');
} else {
    console.log('full');
}

ここで私のフィドルをチェックして、配列をチェックするための最も可能な方法を示します。

于 2015-01-29T10:47:29.777 に答える
1

私にとって、高評価の回答のいくつかはjsfiddleに入れると「機能」しますが、動的に生成された量の配列リストがある場合、回答のこのコードの多くは私には機能しません。

これが私のために働いていることです。

var from = [];

if(typeof from[0] !== undefined) {
  //...
}

注意してください、未定義の周りの引用符はありません、そして私は長さを気にしません。

于 2015-07-13T23:36:44.227 に答える
1

以下は、オブジェクトスコープと関数に渡されるすべてのタイプの可能なデータ型に関するいくつかの問題を管理するためにエラーをスローする関数にラップされた私のソリューションです。

これがこの問題を調べるために使用された私のフィドルです(ソース

var jill = [0];
var jack;
//"Uncaught ReferenceError: jack is not defined"

//if (typeof jack === 'undefined' || jack === null) {
//if (jack) {
//if (jack in window) {
//if (window.hasOwnP=roperty('jack')){
//if (jack in window){

function isemptyArray (arraynamed){
    //cam also check argument length
  if (arguments.length === 0) { 
    throw "No argument supplied";
  }

  //console.log(arguments.length, "number of arguments found");
  if (typeof arraynamed !== "undefined" && arraynamed !== null) {
      //console.log("found arraynamed has a value");
      if ((arraynamed instanceof Array) === true){
        //console.log("I'm an array");
        if (arraynamed.length === 0) {
            //console.log ("I'm empty");
            return true;
        } else {
          return false;
        }//end length check
      } else {
        //bad type
        throw "Argument is not an array";
      } //end type check
  } else {
    //bad argument
    throw "Argument is invalid, check initialization";;
  }//end argument check
}

try {
  console.log(isemptyArray(jill));
} catch (e) {
    console.log ("error caught:",e);
}
于 2019-07-15T04:29:15.503 に答える
0

あなたはこれをするべきです

    if (!image_array) {
      // image_array defined but not assigned automatically coerces to false
    } else if (!(0 in image_array)) {
      // empty array
      // doSomething
    }
于 2016-03-16T08:45:30.400 に答える
0

おそらくあなたimage_arrayは配列ではなく、lengthプロパティ(文字列など)を持ついくつかのオブジェクトです-試してみてください

if(image_array instanceof Array && image_array.length)

function test(image_array) {
  if(image_array instanceof Array && image_array.length) { 
    console.log(image_array,'- it is not empty array!')
  } else {
    console.log(image_array,'- it is empty array or not array at all!')
  }
}

test({length:5});
test('undefined');
test([]);
test(["abc"]);

于 2020-09-07T21:08:26.137 に答える
0

私の場合、array_.length内部に値があったとしても、常に0を返しました。おそらく、デフォルト以外のインデックスが原因です。

したがって、配列が定義されているかどうかを確認するには、次を使用しますtypeof _array !== 'undefined' 。次に、日付が含まれているかどうかを確認するには、空の配列と比較するだけです。_array !== []

于 2021-04-02T17:27:40.343 に答える
0

私が(別の言語から来て)動作することがわかった方法は、テストするための単純な関数を作成することです。

配列のサイズをチェックし、長さをパラメーターで渡す関数を作成します。

isEmpty(size){
        if(size==0) {
            return true;
        } else  {
            return false;
        }
    }

//then check
if(isEmpty(yourArray.length)==true){
            //its empty
        } else {
            //not empty
        }
于 2022-01-29T10:01:43.430 に答える
-1

tsで

 isArray(obj: any) 
{
    return Array.isArray(obj)
  }

HTMLで

(photos == undefined ||!(isArray(photos)&& photos.length> 0))

于 2018-08-13T11:36:19.487 に答える
-5

image_arrayを作成すると、空になるため、image_array.lengthは0になります。

以下のコメントで述べられているように、私はこの質問の答えに基づいて私の答えを編集し ます):

var image_array = []

elseブラケット内では、コードで前に定義されたimage_arrayに何も変更されません

于 2012-07-31T15:20:07.647 に答える