কোনও অ্যারে খালি আছে কিনা তা যাচাই করুন


358

পৃষ্ঠাটি যখন প্রথমবার লোড হচ্ছে তখন আমাকে কোনও চিত্র আছে কিনা তা পরীক্ষা 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 = [];
}

এইচটিএমএল লোড করার আগে আপডেট করুন, আমার এই জাতীয় কিছু রয়েছে:

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

কনসোল লগ image_array- আপনি কি পাবেন?
উত্কানস

@ উটকানোস যদি সেখানে বর্ণ চিত্র_আরে = [] - অপরিবর্তিত থাকে তবে // বর্ণ চিত্র_আরে = [] (কমেেন্ট) - আসল অ্যারে।
ব্যবহারকারী 1564141

অ্যারে? দৈর্ঘ্য - ব্যাপকভাবে সমর্থিত এবং শীঘ্রই একটি স্থানীয় বৈশিষ্ট্য হয়ে উঠবে
আনবু আগরওয়াল

উত্তর:


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

33
নাঃ। চিত্র_আররে শূন্য হলে এটি বিস্ফোরিত হবে। মারফি আইন বলে যে কোনও দিন এটি হবে।
মার্কো ফাউস্টিনেল্লি 20'15

7
image_array.lengthযথেষ্ট না ? (নির্দিষ্ট না করে >0)
এমকন্ট

কৌতূহলী: আপনি কি এমন কোনও ব্যবহারের সন্ধান পেতে পারেন যা @ জেমসড্রিংকার্ডের উত্তর ব্যবহার করে ভেঙে যায়?
tsemer

11
if (image_array && image_array.length){ // array exists and has elements
YeeHaw1234

194

অ্যারে হয় ফাঁকা কিনা তা যাচাই করতে To

একটি আধুনিক উপায়, 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
}

একটি কফিস্ক্রিপ্ট উপায়:

if array?.length > 0

কেন?

কেস অপরিজ্ঞাত
অপরিজ্ঞাত ভেরিয়েবল এমন একটি ভেরিয়েবল যা আপনি এটিকে এখনও কিছু বরাদ্দ করেননি।

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

কেস নাল
সাধারণভাবে বলতে গেলে নাল একটি মানের অভাবের রাষ্ট্র। উদাহরণস্বরূপ একটি ভেরিয়েবল শূন্য হয় যখন আপনি কিছু ডেটা পুনরুদ্ধার করতে বা ব্যর্থ হন।

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

কেস না অ্যারে
জাভাস্ক্রিপ্টে ডায়নামিক টাইপ সিস্টেম রয়েছে। এর অর্থ আমরা কোন পরিবর্তনশীলকে কী ধরণের অবজেক্ট ধারণ করে তা গ্যারান্টি দিতে পারি না। এমন একটি সুযোগ রয়েছে যা আমরা উদাহরণের সাথে কথা বলছি না Array

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

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

কেস খালি অ্যারে
এখন যেহেতু আমরা অন্যান্য সমস্ত সম্ভাবনা পরীক্ষা করেছি, আমরা একটি উদাহরণের সাথে কথা বলছি Array। এটি খালি নেই তা নিশ্চিত করার জন্য, আমরা এর অধীনে থাকা উপাদানগুলির সংখ্যা সম্পর্কে জিজ্ঞাসা করি এবং এটির শূন্যের চেয়ে আরও বেশি উপাদান রয়েছে তা নিশ্চিত করে।

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

secondArray = [1,2,3];
secondArray.length > 0; // => true

8
দয়া করে মনে রাখবেন যে এটি পরীক্ষা করা কেবল পর্যাপ্ত নয়(typeof array != "undefined" && array.length > 0) কারণ যদি arrayনাল হয় তবে আমরা পাব TypeError: Cannot read property 'length' of null
পুয়ান খোসরভি

হতে পারে & সাথে ||
সাহার চ।

!(typeof array !== "undefined") || !(array.length > 0)? কেবল এটি চেষ্টা করে দেখুন, একই ত্রুটি পেয়েছে। আপনি কীভাবে ব্যবহার ||করবেন তার পুরো উদাহরণ দিতে পারেন ?
পুয়ান খোসরভি

আমি বলতে (typeof array != "undefined" || array.length > 0)
চাইছিলাম

বিবৃতির জন্য ধন্যবাদ. (typeof array != "undefined" || array.length > 0)আয় trueযদি array = null!(typeof array != "undefined" || array.length > 0)আয় falseযদি array = [1,2]। না বোঝার জন্য দুঃখিত, তবে @ এলসা আপনি কি একটি কাজের উদাহরণ প্রদান করতে পারেন? আগাম ধন্যবাদ.
পুয়ান খোসরাভি

70

কীভাবে (ইসিএমএ 5.1):

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

1
পুনরায় .. && image_array.length)। আইএমএইচও, আপনি যখন জেএসের আলগা টাইপিংয়ের উপর নিরাপদে নির্ভর করতে পারেন , কোনও 0পূর্ণসংখ্যা falseএবং একটি non-zeroপূর্ণসংখ্যাকে রূপান্তর করতে true, ভবিষ্যতে পাঠযোগ্যতার জন্য, "আপনি কী বোঝাতে চেয়েছেন" তা আমি বিবেচনা করি। আমি করতাম .. && image_array.length > 0)
টুলমেকারস্টেভ

28

এটিই আমি ব্যবহার করি। প্রথম শর্ত সত্যবাদী, যা উভয় নাল এবং সংজ্ঞায়িত আবরণ। দ্বিতীয় শর্তটি খালি অ্যারে পরীক্ষা করে।

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

বা tsemer এর মন্তব্য ধন্যবাদ আমি একটি দ্বিতীয় সংস্করণ যোগ

if(arrayName && arrayName.length)

তারপরে আমি ফায়ারফক্সে স্ক্র্যাচপ্যাড ব্যবহার করে দ্বিতীয় শর্তের জন্য একটি পরীক্ষা করেছিলাম:

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)ঠিক একই কাজ করে


13
আমি এটি সর্বাধিক সংক্ষিপ্ত বলে মনে করি এবং ব্যতিক্রমের সমস্ত বিষয় coversেকে রাখি। এবং যেহেতু আপনি সত্যতা পছন্দ করেন, তা করতে if (arrayName && arrayName.length)
পেরেও

2
সংক্ষিপ্ত এবং দ্রুত! সি # থেকে আসার সময় আমাকে কিছুটা সময় লেগেছিল যদি (আপত্তি) নাল চেক করার অভ্যাস হয় তবে এখন আমি এটি পছন্দ করি: যদি (আপত্তি) // নাল চেক; যদি (অ্যারে && অ্যারে। দৈর্ঘ্য) // অ্যারে নাল বা খালি চেক; যদি (অ্যারে &&! অ্যারে। দৈর্ঘ্য) // অ্যারে বিদ্যমান, তবে খালি চেক; if (str) // স্ট্রিং নাল নয় এবং খালি নেই। শূন্যটি একটি বৈধ সংখ্যা হলে কেবলমাত্র গ্যাচা সংখ্যাগুলিতে ব্যবহার করবেন না।
রিক লাভ

1
আমি কিছুক্ষণের জন্য (অ্যারেনেম এবং& অ্যারেনেম.লেন্থ) ব্যবহার করে আসছি তখন আমি উদ্বিগ্ন হয়ে পড়েছিলাম যে এটি সম্পর্কে কিছু ভুল হতে পারে। এই উত্তরটি আমাকে সান্ত্বনা দিয়েছে, ধন্যবাদ :)
কোরে

টাইপসক্রিপ্টে সূক্ষ্মতা আছে, যেমন var arrayName = undefined; var isNotEmpty = arrayName && array.length > 0নোটএম্পটি টাইপের জন্য নয় বুলিয়ান নয়, এটি বুলিয়ান হবে | অপরিজ্ঞাত।
গিডরিয়াস


8

আপনি যদি চিত্রটি অ্যারে ভেরিয়েবলটি সংজ্ঞায়িত করা হয়েছিল কিনা তা পরীক্ষা করতে চান তবে আপনি এটি এটি করতে পারেন

if(typeof image_array === 'undefined') {
    // it is not defined yet
} else if (image_array.length > 0) {
    // you have a greater than zero length array
}


@ ব্যবহারকারী 1564141 আপনার চিত্র_আরয়ের সেট হওয়ার সাথে সম্পর্কিতটি কোথায় ফাংশন হিসাবে ঘোষিত হচ্ছে তা বলা শক্ত। আপনার একটি হোস্টিং সমস্যা হতে পারে, সুতরাং আপনার ভেরিয়েবলটি var সূচি_আরে = হিসাবে ঘোষণা করার প্রয়োজন হতে পারে ... এছাড়াও, এমন একটি স্ক্রিপ্ট ট্যাগ যেখানে আপনি সূচি_আররে বন্ধ করে দেওয়া সেট করেছেন। স্ক্রিনশট থেকে এটি প্রদর্শিত হবে না।
মাইক ব্র্যান্ট

অন্যটিতেও সতর্কতা অবলম্বন করা হয়, অ্যারে খালি হলেই আগুন জ্বলে উঠবে, তবে প্রতিবারের চিত্র_আররে কাজ করে ... আমি বুঝতে পারছি না কেন?
ব্যবহারকারী 1564141

@ user1564141 উত্সটি আউটপুট হিসাবে দেখানোর জন্য আপনি যদি আপনার প্রশ্নটি আপডেট করতে পারেন তবে এটি সহায়তা করবে। আপনার সূচি_আররে ঘোষণার অবস্থানের তুলনায় আপনার যদি-অন্য কোনও যুক্তি উত্সের মধ্যে থাকে তবে এখনও আমার কোনও অনুভূতি নেই।
মাইক ব্রেন্ট

6

জাভাস্ক্রিপ্ট

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

লোডাশ এবং অ্যান্ডস্কোর

( _.isArray(myArray) && myArray.length > 0 )

6

isEmptyObject()অ্যারেতে উপাদান রয়েছে কিনা তা পরীক্ষা করতে আপনি jQuery গুলি ব্যবহার করতে পারেন ।

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/


অ্যারে.পুষ্প () - এর সাথে উপাদান যুক্ত করার সময় এটিই আমার জন্য কাজ করেছিল - গতিশীল যুক্ত উপাদানগুলি (এজাক্স) থেকে। ধন্যবাদ
TomoMiha

3

একটি সহজ উপায় যা উপস্থিত না থাকলেও ব্যতিক্রমগুলির ফলাফল না করে এবং বুলিয়ানে রূপান্তর করে:

!!array

উদাহরণ:

if (!!arr) {
  // array exists
}

3

এ কেমন? অপরিশোধিত অ্যারের দৈর্ঘ্যের জন্য অনুসন্ধান করা ব্যতিক্রম ছোঁড়াতে পারে।

if(image_array){
//array exists
    if(image_array.length){
    //array has length greater than zero
    }
}

নেস্টেড ifব্যবহার করা এড়ানো যায় &&, যেমন হিসাবে image_array && image_array.lengthএটি image_arrayবিদ্যমান না থাকলে এটি শর্ট সার্কিট করবে ।
rvazquezglez 26'18

3

আমার জন্য নিশ্চিত যে আমি উচ্চতর রেট প্রাপ্ত উত্তরগুলির কিছু "কাজ" করি যখন আমি সেগুলি jsfiddle এ রাখি, তবে যখন আমার কাছে গতিশীলভাবে উত্পন্ন পরিমাণে অ্যারে রয়েছে তখন উত্তরে এই কোডটি প্রচুর পরিমাণে কেবল আমার জন্য কাজ করে না।

এটিই আমার পক্ষে কাজ করছে।

var from = [];

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

লক্ষ্য করুন, অপরিশোধিত প্রায় কোন উদ্ধৃতি নেই এবং আমি দৈর্ঘ্য নিয়ে বিরক্ত করছি না।


1
দুটি মন্তব্য: 1) typeofএকটি স্ট্রিং ফিরিয়ে দেয়, তুলনা undefinedসবসময় স্বাচ্ছন্দ্যপূর্ণ হবে 2) আপনি সংজ্ঞাযুক্ত কিনা তা পরীক্ষা করেন না from। উপরের আপনার কোডটি যদি এটি না হয় তবে একটি ত্রুটি ছুঁড়ে
ফেলবে

পছন্দ করেছেন এটি প্রমাণ করতে বা আপনার মন্তব্য সরানোর জন্য দয়া করে আপনার jsfiddle বা প্লঙ্কার সরবরাহ করুন।
টম স্টিকেল

@ জেল্টর, স্রেফ সন্ধান করছেন এবং মনে হচ্ছে আপনার উত্তরটি -2 রয়েছে এবং বোল্ডে লোকেদের বলে যে আপনি ভুল।
টম স্টিকেল

3

alচ্ছিক চেইন

Alচ্ছিক শৃঙ্খলাবদ্ধতা প্রস্তাব 4 ম পর্যায়ে পৌঁছেছে এবং আরও ব্যাপক সমর্থন পাচ্ছে, এটি করার একটি খুব মার্জিত উপায় আছে

if(image_array?.length){

  // image_array is defined and has at least one element

}

2

আমি জাভাস্ক্রিপ্টে এই সমস্যাটি পুরোপুরি দেখতে পাচ্ছি। আমার পক্ষে এটি করার সর্বোত্তম উপায় হ'ল দৈর্ঘ্য পরীক্ষা করার আগে খুব বিস্তৃত চেক করা। আমি এই Q & A- মধ্যে কিছু অন্যান্য সমাধানের দেখেছি, কিন্তু আমি পারেন জন্য চেক করতে সক্ষম হতে চেয়েছিলেন nullবা undefinedবা অন্য কোন মিথ্যা মান।

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

এই প্রথম জন্য চেক করবে undefined, nullঅন্যান্য মিথ্যা মূল্যবোধ, বা। যদি এর মধ্যে কোনও সত্য হয় তবে এটি বুলিয়ানটি সম্পূর্ণ করবে OR। তারপরে আরও ঝুঁকিপূর্ণ চেক array.lengthযা অ্যারে অপরিজ্ঞাত থাকলে আমাদের ত্রুটি করতে পারে, এটি চেক করা যেতে পারে। এই যদি পৌঁছেছেন করা হবে না arrayহয় undefinedবা null, তাই অবস্থার ক্রম খুবই গুরুত্বপূর্ণ।



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

0

অ্যারে হিসাবে ঘোষিত কোনও ভেরিয়েবল না থাকলে আপনি একটি চেক তৈরি করতে পারেন:

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

ভেরিয়েবল এক্স বিদ্যমান কিনা তা পরীক্ষা করে এবং এটি যদি থাকে তবে এটি ভরাট অ্যারে কিনা তা যাচাই করে। অন্যথায় এটি একটি খালি অ্যারে তৈরি করে (বা আপনি অন্যান্য জিনিসগুলি করতে পারেন);

আপনি যদি নিশ্চিত হন যে একটি অ্যারে ভেরিয়েবল তৈরি করা হয়েছে তবে সেখানে একটি সহজ চেক রয়েছে:

var x = [];

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

অ্যারে চেক করার সর্বাধিক সম্ভাব্য উপায়গুলি দিয়ে আপনি আমার ফিডলটি এখানে পরীক্ষা করতে পারেন ।



-1

ts মধ্যে

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

এইচটিএমএলে

(ফটোগুলি == অপরিশোধিত ||!


3
আপনি কি এ ব্যাপারে নিশ্চিত? দ্বিতীয় অংশটি সর্বোপরি এইচটিএমএল এর মতো দেখাচ্ছে না
নিকো হাজেস

-3

আপনি যখন নিজের ইমেজ_রেটি তৈরি করেন, এটি খালি হয়, সুতরাং আপনার চিত্র_আররে দৈর্ঘ্য 0 হয়

নীচের মন্তব্যে যেমন বলা হয়েছে, আমি এই প্রশ্নের উত্তরের ভিত্তিতে আমার উত্তরটি সম্পাদনা করি ):

var image_array = []

অন্য বন্ধনীগুলির ভিতরে কোডের পূর্বে বর্ণিত ইমেজ_রেতে কোনও পরিবর্তন হয় না


পৃষ্ঠাটি লোড করার সময় আমার কাছে এটি উত্সে আছে ... কেবল পোস্ট করতে ভুলবেন না।
ব্যবহারকারী 1564141

আমি আমার উত্তরে এমন কিছু যুক্ত করতে চাই যা ভুল হতে পারে তাই আমি এটিকে এখানে উল্লেখ করছি। সাধারণ ভাষায়, কোনও ব্লকের ভিতরে যা তৈরি করা হয় তা ব্লকের "বাহিরে" দৃশ্যমান হয় না। আপনি []var image_array = []অন্য ব্লকের ভিতরে সংজ্ঞা দিচ্ছেন , আমি নিশ্চিত নই যে এটি বাইরে দেখা যায় seen চেষ্টা করুনimage_array = []
Al_th

তবে আমি অন্যটি থেকে যদি চিত্র_আরেটিকে সরিয়ে ফেলি তবে সবকিছু ঠিকঠাক কাজ করে।
ব্যবহারকারী 1564141
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.