मैं एक अजाक्स परिणाम पर लूपिंग कर रहा हूं और JSON को select बॉक्स में पॉप्युलेट कर रहा हूं, लेकिन प्रत्येक JSON परिणाम अद्वितीय नहीं है, कुछ में समान मान होता है।

मैं यह जांचना चाहता हूं कि लूप के पुनरावृत्त होने पर select बॉक्स में पहले से ही कोई मान है या नहीं, और यदि कोई मान समान है, तो इसे दोबारा प्रिंट न करें, लेकिन किसी कारण से मेरी if चेक करें काम नहीं कर रहा?

for (var i = 0; i < result.length; i++) {

var JsonResults = result[i];
var sourcename = JsonResults.Source.DataSourceName;

if ($('.SelectBox').find('option').text != sourcename) {
    $('.SelectBox').append('<option>' + sourcename + '</option>');                             
   }
}
2
Whirlwind991 27 मार्च 2018, 03:56

3 जवाब

सबसे बढ़िया उत्तर

text() एक विधि है, इसलिए इसे कोष्ठक की आवश्यकता है, और यह सभी <option> का पाठ देता है। ऐसा करने के बेहतर तरीके हैं, लेकिन आपके समान दृष्टिकोण सभी जोड़े गए टेक्स्ट को सहेजने के लिए एक चर का उपयोग करके हो सकता है, इसलिए हम <option> तत्वों की जांच करने के बजाय इस चर की जांच कर सकते हैं:

var result = ["first", "second", "first", "third", "second"];

var options = {};
for (var i = 0; i < result.length; i++) {
  var JsonResults = result[i];
  var sourcename = JsonResults; //JsonResults.Source.DataSourceName;

  if (!options[sourcename]) {
    $('.SelectBox').append('<option>' + sourcename + '</option>');
    options[sourcename] = true;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select class="SelectBox"></select>

नोट: मैंने केवल डेमो के लिए var sourcename = JsonResults; का उपयोग किया है। इसके बजाय अपनी मूल पंक्ति का प्रयोग करें।

1
Racil Hilan 27 मार्च 2018, 02:04

एक बात के लिए, jQuery विधि .text() है - यह एक स्थिर संपत्ति नहीं है। दूसरे के लिए, आपका .find आपको प्रत्येक <option> का संयुक्त टेक्स्ट देगा, जो आप नहीं चाहते।

एचटीएमएल को पॉप्युलेट करने से पहले ऑब्जेक्ट को कम करने का प्रयास करें:

const sourceNames = results.map(result => result.Source.DataSourceName);
const dedupedSourceNames = sourceNames.map((sourceName, i) => sourceNames.lastIndexOf(sourceName) === i);
dedupedSourceNames.forEach(sourceName => {
  $('.SelectBox').append('<option>' + sourceName + '</option>');
});
0
CertainPerformance 27 मार्च 2018, 01:04

.text एक फ़ंक्शन है, इसलिए आपको विकल्प में टेक्स्ट वापस पाने के लिए इसे कॉल करना होगा

for (var i = 0; i < result.length; i++) {

  var JsonResults = result[i];
  var sourcename = JsonResults.Source.DataSourceName;

  if ($('.SelectBox').find('option').text() != sourcename) {
    $('.SelectBox').append('<option>' + sourcename + '</option>');                             
  }
}
0
Musa 27 मार्च 2018, 00:59