এটি কি "সূচী" অবস্থানের কোনও মান বিদ্যমান কিনা তা পরীক্ষা করার জন্য কাজ করবে বা আরও ভাল উপায় আছে:
if(arrayName[index]==""){
// do stuff
}
এটি কি "সূচী" অবস্থানের কোনও মান বিদ্যমান কিনা তা পরীক্ষা করার জন্য কাজ করবে বা আরও ভাল উপায় আছে:
if(arrayName[index]==""){
// do stuff
}
উত্তর:
ধারণামূলকভাবে, জাভাস্ক্রিপ্টের অ্যারেগুলিতে array.length
উপাদান রয়েছে, array[0]
যতক্ষণ না শুরু হয় array[array.length - 1]
। সূচকের সাথে একটি অ্যারের উপাদান i
সংজ্ঞা দেওয়া হয় যদি i
এর মধ্যে থাকে 0
এবং array.length - 1
অন্তর্ভুক্ত থাকে তবে অ্যারের অংশ হতে পারে । আমি যদি এই ব্যাপ্তিতে না থাকি তবে এটি অ্যারেতে নয়।
সুতরাং ধারণা অনুসারে, অ্যারেগুলি লিনিয়ার, শূন্য থেকে শুরু করে সর্বাধিকতে চলে যায়, সেই পরিসরের ভিতরে "ফাঁক" থাকার কোনও ব্যবস্থা ছাড়াই যেখানে কোনও প্রবেশিকা বিদ্যমান নেই। প্রদত্ত অবস্থানের সূচীতে মানটি বিদ্যমান কিনা (যেখানে সূচক 0 বা ধনাত্মক পূর্ণসংখ্যার), আপনি আক্ষরিকভাবে কেবল ব্যবহার করুন
if (i >= 0 && i < array.length) {
// it is in array
}
এখন, হুডের নিচে, জাভাস্ক্রিপ্ট ইঞ্জিনগুলি প্রায় অবশ্যই এর মতো অ্যারে স্পেস বরাদ্দ করবে না কারণ এটি একটি গতিশীল ভাষায় বেশি বোঝায় না এবং এটি নির্দিষ্ট কোডের জন্য অকার্যকর হবে। তারা সম্ভবত হ্যাশ টেবিল বা কৌশলগুলির কিছু সংকর মিশ্রণ এবং অ্যারের অপরিজ্ঞাত রেঞ্জগুলি সম্ভবত তাদের নিজস্ব স্মৃতি বরাদ্দ করা হয়নি। তবুও, জাভাস্ক্রিপ্ট ভাষা array.length
এন এর অ্যারেগুলি এন সদস্য হিসাবে উপস্থাপন করতে চায় এবং তাদের নামকরণ করা হয় 0 থেকে এন - 1 , এবং এই পরিসরের যে কোনও কিছু অ্যারের অংশ।
যাইহোক, আপনি সম্ভবত যা চান তা হ'ল এটি জানতে হবে যে কোনও অ্যারের কোনও মান আসলে সংজ্ঞায়িত কিছু - তবে এটি তা নয় undefined
। হতে পারে আপনি এমনকি জানি যদি এটা সংজ্ঞায়িত করা হয় এবং এর চান নাnull
। এটা তোলে কি কখনো তাদের মূল্য নির্ধারণের ছাড়া একটি অ্যারের সদস্যদের যোগ করা সম্ভব হল: উদাহরণস্বরূপ, যদি আপনি বাড়িয়ে অ্যারের মান যোগ array.length
সম্পত্তি, কোন নতুন মান হতে হবে undefined
।
প্রদত্ত মানটি অর্থবোধক কিছু, বা সংজ্ঞায়িত করা হয়েছে কিনা তা নির্ধারণ করতে। এটি, না undefined
, বা null
:
if (typeof array[index] !== 'undefined') {
অথবা
if (typeof array[index] !== 'undefined' && array[index] !== null) {
মজার বিষয় হল, জাভাস্ক্রিপ্টের তুলনা বিধিগুলির কারণে, আমার শেষ উদাহরণটি এটিতে অনুকূলিত করা যেতে পারে:
if (array[index] != null) {
// The == and != operators consider null equal to only null or undefined
}
length
সম্পত্তি থাকে সাধারণত , পরবর্তী ক্ষেত্রে দুটি উদাহরণ আরও উপযুক্ত।
foo !== 'undefined' && foo !== null
শুধু সঙ্গেfoo != null
0
হয় array.length - 1
। এই মান সব করা হবে না সংজ্ঞায়িত যদিও মান। আপনি যদি অ্যারে সদস্যটিতে মুছুন কীওয়ার্ডটি ব্যবহার করেন তবে এটি সেই সদস্যটিকে পুনরায় সংজ্ঞায়িত করাতে সেট করবে, ঠিক যেমন আপনি অ্যারেটির দৈর্ঘ্য পরামিতি বাড়িয়ে একটি অ্যারের প্রসারিত করেন, নতুন মানগুলি অপরিজ্ঞাত হিসাবে শুরু হবে। বাস্তবে, জাভাস্ক্রিপ্ট বাস্তবায়ন সম্ভবত অ্যারে স্টোরেজটিকে অনুকূল করবে এবং কিছু বা সমস্ত অপরিজ্ঞাত মান কোনও স্মৃতিতে থাকতে পারে না।
new Array(1)[0] === undefined
তবে মানটি খালি। [undefined][0] === undefined
কিন্তু মান সেট করা হয়; অ্যারে আছে একটি মান। শুধুমাত্র নিখুঁত উত্তর ব্যবহার করছে in
বা hasOwnProperty()
- idx in array
বা array.hasOwnProperty(idx)
এই উত্তর --per: stackoverflow.com/a/39171620/3120446
আমরা কেবল এটি করতে পারি না:
if(arrayName.length > 0){
//or **if(arrayName.length)**
//this array is not empty
}else{
//this array is empty
}
if(arrayName.length) {...
কোনো পার্থক্য?
if(arrayName.length) {...
ব্যর্থnull
[undefined, undefined]
যার দৈর্ঘ্য = 2 সহ একটি অ্যারে
কেবল ব্যবহার করা .length
নিরাপদ নয় এবং কিছু ব্রাউজারে ত্রুটির কারণ ঘটবে। এখানে একটি আরও ভাল সমাধান:
if(array && array.length){
// not empty
} else {
// empty
}
বা, আমরা ব্যবহার করতে পারি:
Object.keys(__array__).length
if(!arrayName[index]){
// do stuff
}
if(arrayName.length > index && arrayName[index] !== null) {
//arrayName[index] has a value
}
x == null
নাল বা অপরিজ্ঞাত শুধুমাত্র অন্য কোনও কিছুর জন্যই সত্য হবে। একইভাবে, x != null
এমন কোনও কিছুর ক্ষেত্রেও সত্য হবে যা শূন্য বা অপরিজ্ঞাত নয়। আপনার যদি বিশেষভাবে অপরিজ্ঞাতভাবে সন্ধান করার প্রয়োজন না হয় তবে কেবল অন্তর্নিহিত রূপান্তরনের সদ্ব্যবহারে ঝুঁকুন।
সংক্ষিপ্ত এবং সর্বজনীন পদ্ধতির
যদি আপনি কোনও অ্যারে পরীক্ষা করতে চান তবে এর মিথ্যা মান রয়েছে (যেমন মিথ্যা, অপরিজ্ঞাত, নাল বা খালি স্ট্রিং) আপনি প্রতিটি () পদ্ধতি এই জাতীয়ভাবে ব্যবহার করতে পারেন :
array.every(function(element) {return !!element;}); // returns true or false
উদাহরণ স্বরূপ:
['23', null, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false
['23', '', 2, {key: 'value'}].every(function(element) {return !!element;}); // returns false
['23', true, 2, {key: 'value'}].every(function(element) {return !!element;}); // returns true
আপনার যদি মিথ্যা মানটির প্রথম সূচক পেতে হয় তবে আপনি এটি এটি করতে পারেন:
let falsyIndex;
if(!['23', true, 2, null, {key: 'value'}].every(function(element, index) {falsyIndex = index; return !!element;})) {
console.log(falsyIndex);
} // logs 3
যদি আপনাকে কেবল প্রদত্ত সূচকের জন্য একটি অ্যারের মিথ্যা মান পরীক্ষা করতে হয় তবে আপনি এটি ঠিক এটি করতে পারেন:
if (!!array[index]) {
// array[index] is a correct value
}
else {
// array[index] is a falsy value
}
if(typeof arr ==='object' && arr instanceof Array ){
if(!arr.length){
println 'empty'
}else{
printn 'not Empty'
}
}else{
println 'Null'
}
যদি আপনি 'নাল' বলতে বোঝায় -> এর উপাদানগুলি নাল হয় বা এর সমান হয় তবে এই ক্ষেত্রে: সমস্ত 'নাল' উপাদান ফিল্টার করার পরে অ্যারেটি খালি কিনা তা পরীক্ষা করুন Check
if(!arr.clean().length){return 'is null'}
অবশ্যই আগে ক্লিন পদ্ধতি যুক্ত করুন :
Array.prototype.clean=function(){return this.filter(function(e){return (typeof e !=='undefined')&&(e!= null)&&(e!='')})}
আমি এই জাতীয় একটি ফাংশন তৈরি করার পরামর্শ দেব:
function isEmptyEl(array, i) {
return !(array[i]);
}
আপনি এটিকে কল করতে পারেন:
if (isEmptyEl(arrayName, indexVal)) {
console.log('arrayName[' + indexVal + '] is empty');
}
বিকাশকারীকে isEmptyEl ইন্টারফেস অনুসরণ করতে বাধ্য করা ইনপুট ত্রুটি যেমন অনির্ধারিত অ্যারে নাম বা সূচকওয়াল ভেরিয়েবলগুলি ধরবে।
(জাভাস্ক্রিপ্টে প্রোগ্রামিং করার সময় ডিফেন্সিভ প্রোগ্রাম করা সাধারণত ভাল অনুশীলন))
অ্যারে নেম সংজ্ঞায়িত না করা হলে আপনি এ জাতীয় একটি ত্রুটি ফেলে ফেলবেন:
Uncaught ReferenceError: arrayName is not defined
at <anonymous>:2:15
at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
at Object.InjectedScript.evaluate (<anonymous>:694:21)
অপরিজ্ঞাত সূচকভালের জন্য একই রকম ফলাফল।
অ্যারে বা সূচকের মান উপস্থিত না থাকলে আপনি একটি ত্রুটি পান।
বৈধ ইনপুটটির জন্য, অ্যারে নেম [ইনডেক্সওয়াল] নিম্নলিখিত যে কোনও একটি হলে আপনি কেবলমাত্র সত্য পাবেন:
এটি "খালি" দিয়ে আপনি কী বোঝাতে চান তার উপর নির্ভর করে।
যখন আপনি কোনও নামের কোনও সম্পত্তি নেই এমন কোনও জিনিসের কোনও সম্পত্তির মূল্য পাওয়ার চেষ্টা করবেন তখন আপনি মানটি পাবেন undefined
।
স্পার্স অ্যারেগুলির সাথে এটিই ঘটে: এর মধ্যে 0
এবং array.length-1
বিদ্যমান সমস্ত সূচক হয় না।
সুতরাং আপনি যদি পরীক্ষা করতে পারে array[index] === undefined
।
তবে সম্পত্তিটি index
একটি undefined
মান সহ উপস্থিত থাকতে পারে । আপনি যদি এই কেসটি ফিল্টার করতে চান তবে আপনি in
অপারেটরটি ব্যবহার করতে পারেন বা hasOwnProperty
বর্ণিত হিসাবে, কোনও জাভাস্ক্রিপ্টে কোনও জিনিসের কোনও সম্পত্তি আছে কিনা তা আমি কীভাবে পরীক্ষা করব?
index in array;
array.hasOwnProperty(index);
আপনি যদি কোনও বিদ্যমান সম্পত্তিটি মান undefined
বা null
মানের অস্তিত্বের সাথে বিবেচনা করতে চান তবে আপনি আলগা তুলনা array[index] == undefined
বা ব্যবহার করতে পারেন array[index] == null
।
আপনি যদি জানেন যে অ্যারে অপ্রয়োজনীয় নয়, আপনি এর index
সাথে তুলনা করতে পারেন array.length
। তবে নিরাপদে থাকার জন্য আপনি এটি নিশ্চিত করতে চাইতে পারেন যে index
সত্যই একটি অ্যারে সূচক, সম্পত্তির নাম অ্যারে সূচক কিনা তা পরীক্ষা করে দেখুন
ঠিক আছে, প্রথমে জাভাস্ক্রিপ্টে অ্যারের মান না থাকলে কী হবে তা দেখুন, সুতরাং আমাদের নীচের মতো অ্যারে থাকলে:
const arr = [1, 2, 3, 4, 5];
এবং এখন আমরা 6 টি সূচক 5 তে আছে কিনা তা যাচাই করে দেখছি :
arr[5];
এবং আমরা
undefined
...
সুতরাং এটি মূলত আমাদের উত্তর দিন, অপরিজ্ঞাত কিনা তা যাচাই করার সবচেয়ে ভাল উপায় , তাই এরকম কিছু:
if("undefined" === typeof arrayName[index]) {
//array value is not there...
}
এই ক্ষেত্রে এটি না করা ভাল :
if(!arrayName[index]) {
//Don't check like this..
}
কারণ কল্পনা করুন আমাদের এই অ্যারে রয়েছে:
const arr = [0, 1, 2];
এবং আমরা কি:
if(!arr[0]) {
//This get passed, because in JavaScript 0 is falsy
}
আপনি যেমন দেখতে পাচ্ছেন, তেমন 0 টিও রয়েছে, এটি স্বীকৃতি পায় না, এমন আরও কয়েকটি জিনিস রয়েছে যা আপনাকে একইভাবে করতে এবং আপনাকে বগি প্রয়োগ করতে পারে, তাই সাবধানতা অবলম্বন করুন, আমি সেগুলি সমস্ত তালিকাভুক্ত করছি:
undefined
''
আমি কিছু মিস করেছি বলে মনে করি এমন কিছু বিষয় উল্লেখ করতে চাই: যথা আপনার অ্যারের মাঝখানে "খালি" অ্যারের অবস্থান পাওয়া সম্ভব। নিম্নোক্ত বিবেচনা কর:
let arr = [0, 1, 2, 3, 4, 5]
delete arr[3]
console.log(arr) // [0, 1, 2, empty, 4, 5]
console.log(arr[3]) // undefined
চেক করার প্রাকৃতিক উপায়টি হ'ল অ্যারে সদস্য অপরিশোধিত কিনা তা দেখতে হবে, অন্য উপায় আছে কিনা তা সম্পর্কে আমি নিশ্চিত ure
if (arr[index] === undefined) {
// member does not exist
}
লোডাশের সাহায্যে আপনি এটি করতে পারেন:
if(_.has(req,'documents')){
if (req.documents.length)
_.forEach(req.documents, function(document){
records.push(document);
});
} else {
}
if(_.has(req,'documents'))
আমাদের অনুরোধের অবজেক্টটির নামের কোনও সম্পত্তি রয়েছে কিনা তা যাচাই documents
করা এবং যদি তার কাছে সেই প্রপ if (req.documents.length)
থাকে তবে পরেরটিটি যদি এটি খালি অ্যারে না হয় তবে যাচাইকরণ করা উচিত, যাতে অন্যান্য জিনিসগুলি forEach
এগিয়ে নেওয়া যেতে পারে।
এটি কখনই সংজ্ঞায়িত করা হয়নি বা এটি মুছে ফেলা হয়েছে কিনা তা পরীক্ষা করতে:
if(typeof arrayName[index]==="undefined"){
//the index is not in the array
}
আপনি কিছু সূচি মুছে ফেলে সেখানে সাহসী অ্যারে এবং অ্যারেগুলির সাথেও কাজ করে
এটি কখনই সংজ্ঞায়িত হয়নি, তা মুছে ফেলা হয়েছে বা একটি নাল বা লজিকাল খালি মান (NaN, খালি স্ট্রিং, মিথ্যা):
if(typeof arrayName[index]==="undefined"||arrayName[index]){
//the index is not defined or the value an empty value
}
লারাভেল ডেটাবেবল ব্যবহার করে আমি এই সমস্যাটিতে চলে এসেছি। আমি properties
একটি ক্রিয়াকলাপ লগতে ডাকা একটি জেএসওএন মান সংরক্ষণ করছিলাম এবং এই মানটি ফাঁকা থাকাকালীন না হওয়ার ভিত্তিতে একটি বোতামটি দেখাতে চেয়েছিলাম।
ঠিক আছে, ডেটাবেবলগুলি এটিকে খালি থাকলে অ্যারে হিসাবে ব্যাখ্যা করছিল, এবং কোনও বস্তু যদি তা না থাকে, সুতরাং নিম্নলিখিত সমাধানটি আমার পক্ষে কাজ করেছে:
render: function (data, type, full) {
if (full.properties.length !== 0) {
// do stuff
}
}
একটি বস্তুর দৈর্ঘ্যের সম্পত্তি নেই।
আমি মনে করি এই সিদ্ধান্তটি সেই ছেলেদের জন্য উপযুক্ত যারা অপরিহার্য ওওপি বা পদ্ধতিগতের তুলনায় ঘোষণামূলক কার্যকরী প্রোগ্রামিং পছন্দ করে। যদি আপনার প্রশ্নটি " ভিতরে কিছু মান আছে? (সত্যবাদী বা মিথ্যা মান)" আপনি .some
ভিতরে মানগুলি বৈধ করার জন্য পদ্ধতি ব্যবহার করতে পারেন ।
[].some(el => el || !el);
function isEmpty(arr) { ... }
।[].length
ফলে 0
যা কিছু ক্ষেত্রে বিপজ্জনক।[].length > 0
উক্তিটিও "এর দৈর্ঘ্য কি শূন্যের চেয়ে বেশি?"উন্নত উদাহরণ:
[ ].some(el => el || !el); // false
[null].some(el => el || !el); // true
[1, 3].some(el => el || !el); // true
আপনি আরও কার্যকরভাবে এটি করতে লোডশ লাইব্রেরি ব্যবহার করতে পারেন, যেমন:
আপনার যদি "পোষা প্রাণী" নামে একটি অ্যারে থাকে, উদাহরণস্বরূপ:
var pets = ['dog', undefined, 'cat', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });
নাল বা অপরিজ্ঞাত মানগুলির জন্য সমস্ত অ্যারে মানগুলি পরীক্ষা করতে:
var pets = ['dog', undefined, 'cat', null];
console.log(_.isEmpty(pets[1])); // true
console.log(_.isEmpty(pets[3])); // true
console.log(_.isEmpty(pets[4])); // false
_.map( pets, (pet, index) => { console.log(index + ': ' + _.isEmpty(pet) ) });
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
আরও উদাহরণ চেক করুন http://underscorejs.org/
fn(){}
একটি বাক্য গঠন ত্রুটি, এবং এটি কোনও নির্দিষ্ট সূচীতে অ্যারে আইটেম উপস্থিত আছে কি না তা পরীক্ষা করে কীভাবে তা সহায়তা করে তা মোটেও পরিষ্কার নয়।