क्या यह परीक्षण करने के लिए काम करेगा कि क्या "इंडेक्स" स्थिति में मौजूद है या नहीं, या इसका कोई बेहतर तरीका है:
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
n होने के रूप में एन के सदस्यों और वे नाम हैं 0 करने के लिए n - 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
। हालांकि ये सभी मूल्य परिभाषित मूल्य नहीं होंगे। यदि आप किसी सरणी सदस्य पर हटाए गए कीवर्ड का उपयोग करते हैं तो यह उस सदस्य को वापस अपरिभाषित कर देगा, जैसे यदि आप किसी सरणी को उसके array.length पैरामीटर को बढ़ाकर बढ़ाते हैं, तो नए मान अपरिभाषित हो जाएंगे। वास्तव में, जावास्क्रिप्ट कार्यान्वयन संभवतः सरणी भंडारण को अनुकूलित करेगा और कुछ या सभी अपरिभाषित मानों पर कोई मेमोरी नहीं हो सकती है।
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'
}
यदि आप 'Null' से मतलब रखते हैं -> इसके तत्व शून्य हैं या '' के बराबर हैं, तो इस स्थिति में: सभी 'null' तत्वों को फ़िल्टर करने के बाद सरणी खाली है या नहीं, इसकी जांच करें
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 इंटरफ़ेस का पालन करना अपरिभाषित सरणी नाम या indexVal चर जैसे इनपुट त्रुटियों को पकड़ लेगा।
(यह आमतौर पर जावास्क्रिप्ट में प्रोग्रामिंग करते समय रक्षात्मक रूप से प्रोग्राम करने का अच्छा अभ्यास है।)
अगर सरणी नाम परिभाषित नहीं किया गया था तो आपको इस तरह से एक त्रुटि मिलेगी:
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)
एक अपरिभाषित इंडेक्सवैल के लिए समान परिणाम।
यदि सरणी या अनुक्रमणिका मान मौजूद नहीं है, तो आपको एक त्रुटि मिलती है।
मान्य इनपुट के लिए, आपको केवल एक सच मिलेगा यदि arrayName [indexVal] निम्नलिखित में से कोई है:
यह निर्भर करता है कि आप "खाली" के साथ क्या मतलब है।
जब आप किसी ऐसी संपत्ति पर मूल्य प्राप्त करने का प्रयास करते हैं, जिसमें उस नाम की कोई संपत्ति नहीं है, तो आपको मूल्य मिलेगा 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];
और अब हम जांचते हैं कि सूचकांक 5 में 6 है या नहीं:
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
जाँच करने का स्वाभाविक तरीका तब यह देखना होगा कि क्या सरणी सदस्य अपरिभाषित है, यदि अन्य तरीके मौजूद हैं तो मैं अनिश्चित हूँ
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
}
मैं इस मुद्दे में लार्वा डेटेटेबल्स का उपयोग करके भाग गया। मैं नामक JSON मान संग्रहीत कर रहा थाproperties
को एक गतिविधि लॉग में और इस मूल्य के खाली होने या न होने के आधार पर एक बटन दिखाना चाहता था।
ठीक है, डेटाटैबल्स इसे एक सरणी के रूप में व्याख्या कर रहा था यदि यह खाली था, और एक वस्तु अगर यह नहीं थी, इसलिए, निम्न समाधान ने मेरे लिए काम किया:
render: function (data, type, full) {
if (full.properties.length !== 0) {
// do stuff
}
}
एक वस्तु की लंबाई संपत्ति नहीं है।
मुझे लगता है कि यह निर्णय उन लोगों के लिए उपयुक्त है जो अनिवार्य OOP या प्रक्रियात्मक पर घोषणात्मक कार्यात्मक प्रोग्रामिंग पसंद करते हैं। यदि आपका प्रश्न है " क्या कुछ मूल्य हैं? (एक सत्य या मिथ्या मूल्य)" तो आप .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(){}
एक वाक्यविन्यास त्रुटि है, और यह बिल्कुल स्पष्ट नहीं है कि यह कैसे जाँचता है कि एक सरणी आइटम एक निश्चित सूचकांक पर मौजूद है या नहीं।