मॉडल भ्रूण पर 1 को सही या 0 में कैसे परिवर्तित करें


99

मेरे पास एक मॉडल है जो एक mysql डेटाबेस से JSON प्रतिक्रिया के साथ सेट है। मॉडल डेटा को डेटाबेस में बूलियन / स्मॉलिंट फ़ील्ड में सही या गलत के साथ सेट किया गया है, जो उपयोग करता है 1या 0

मेरे विचार में, मेरे पास एक बाइंडिंग है जो अंडरस्कोर के साथ बूलियन के लिए जांच करता है _.isBoolean। बेशक, जब मेरा मॉडल डेटा प्राप्त करता है, तो यह सही या गलत के साथ 1या 0इसके बजाय सेट होता है और _.isBooleanचेक विफल हो जाता है।

वहाँ वैसे भी या तो सही ढंग से mysql से मेरे JSON उत्तर के बजाय एक बूलियन सही या गलत मान होना है 1या 0, या अधिमानतः, वहाँ पर कलाकारों को लाने (और देखने से पहले renders) अपने मॉडल अद्यतन को स्वयं के लिए एक रास्ता है trueया falseके आधार पर यह 1 या 0 संपत्ति है?

उदाहरण के लिए मेरे मॉडल का डेटा ऐसा लगता है {"isChecked":"1"}जब मुझे इसकी आवश्यकता है{"isChecked":true}

आपके पास किसी भी सुझाव के लिए बहुत धन्यवाद!


सर्वर साइड तकनीक का उपयोग क्या है?
अरुण पी जॉनी

PHP, प्रतिक्रिया एक json_encode के साथ क्वेरी परिणाम पर लिखी जा रही है
क्रिस एम

क्या आपने इस तरीके से कोशिश की: isChecked = isChecked? true: false
Ulug'bek Ro'zimboyev

जवाबों:


193

आप सभी की जरूरत परिवर्तित है stringकरने के लिए intके साथ +और साथ बूलियन के लिए परिणाम कन्वर्ट !!:

var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked

आप इस parseविधि में हेरफेर कर सकते हैं :

parse: function (response) {
  response.isChecked = !!+response.isChecked;
  return response;
}

अद्यतन : 7 साल बाद, मुझे Number(string)रूपांतरण अधिक सुरुचिपूर्ण लगता है । इसके अलावा किसी वस्तु को बदलना सबसे अच्छा विचार नहीं है। ऐसा कहे जाने के बाद:

parse: function (response) {
  return Object.assign({}, response, {
    isChecked: !!Number(response.isChecked), // OR
    isChecked: Boolean(Number(response.isChecked))
  });
}

18
+1 intपहले में परिवर्तित करने के लिए । !!+"1"; // true, !!+"0"; // false, !!+1; // true, !!+0; // false
टेरी युवा

76

एक डबल का उपयोग न करें:

!!1 = true;

!!0 = false;

obj.isChecked = !!parseInt(obj.isChecked);

2
यह मेरे लिए काम करता है, लेकिन किसी कारण से मेरे पास अभी भी इसे बाहर पार्स करने के लिए थाvalue = (!!parseInt(value) ? true : false)
रिक

बस सुनिश्चित करने के लिए, !!2या कोई अन्य संख्या = false, सही?
एलिय्याह मॉक

नहीं है, !! 2 सच हो सकता है, यह केवल झूठे के लिए 0 हो जाएगा
डेव

61

यहां एक और विकल्प है जो लंबा है, लेकिन अधिक पठनीय हो सकता है:

Boolean(Number("0")); // false
Boolean(Number("1")); // true

6
पठनीयता FTW!
जीरो_कूल

7
2020 में, यह
etiennejcharles

13

संपत्ति के मूल्य की तुलना करना

जावास्क्रिप्ट

आप संपत्ति की तुलना असाइन कर सकते हैं "1"

obj["isChecked"] = (obj["isChecked"]==="1");

यह केवल "1"हालांकि एक स्ट्रिंग मूल्य के लिए मूल्यांकन करता है । अन्य चर एक वास्तविक की तरह झूठे के लिए विकसित typeof numberहोंगे। (यानी obj["isChecked"]=1)

आप के बारे में indiscrimate बनना चाहता था, तो "1"या 1, आप इस्तेमाल कर सकते हैं:

obj["isChecked"] = (obj["isChecked"]=="1");

उदाहरण आउटपुट

console.log(obj["isChecked"]==="1"); // true
console.log(obj["isChecked"]===1); // false
console.log(obj["isChecked"]==1); // true
console.log(obj["isChecked"]==="0"); // false
console.log(obj["isChecked"]==="Elephant"); // false

पीएचपी

PHP में एक ही अवधारणा

$obj["isChecked"] = ($obj["isChecked"] == "1");

जावास्क्रिप्ट के लिए ऊपर बताई गई वही ऑपरेटर सीमाएं लागू होती हैं।

डबल नहीं

'डबल नॉट' भी काम करता है। जब लोग पहली बार इसे पढ़ते हैं तो यह भ्रामक होता है लेकिन यह पूर्णांक / संख्या प्रकार मानों के लिए दोनों भाषाओं में काम करता है। हालांकि यह स्ट्रिंग प्रकार के मूल्यों के लिए जावास्क्रिप्ट में काम नहीं करता है क्योंकि वे हमेशा सही मूल्यांकन करते हैं:

जावास्क्रिप्ट

!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false

पीएचपी

echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false

अच्छा विचार क्रिस्टोफर, मैं इसे लिख कर हासिल करने में सक्षम था: `this.model.set ('isChecked', (this.model.get ('Checked ') ===' 1 '))` मेरे प्रारंभिक कार्य में रीढ़ की हड्डी का दृश्य।
क्रिस एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.