javascript - কেন জাভাস্ক্রিপ্ট equals 5== 8 সত্য হিসাবে?




html checkbox (2)

তাই আমার 2 চেক বক্স আছে:

var statusList = [];
function updateStatusString(x) {
    if (statusList != null) {
        if (statusList.length > 0) {
            for (var i = 0; i < statusList.length; i++) {
                if (parseInt(statusList[i]) == parseInt(x)) {
                    statusList[i] = 123;
                } else {
                    statusList.push(x);
                }
            }
        } else {
            statusList.push(x);
        }
    }
    alert(statusList);
}
<label>&nbsp;<input type="checkbox" name="Active" value="5" onchange=updateStatusString("5")>&nbsp;"Active"</label>
<label>&nbsp;<input type="checkbox" name="NonActive" value="8" onchange=updateStatusString("8")>&nbsp;"Active"</label>

যখন আমি একটি চেকবক্সে ক্লিক করি তখন এটি একটি জাভাস্ক্রিপ্ট তালিকাতে যোগ করে, যদি এটি ইতিমধ্যে তালিকাতে থাকে তবে আমি এটি অন্য মানের সাথে ওভাররাইট করতে চাই (এই উদাহরণে 123)।

কিন্তু যখন আমি দ্বিতীয়টি ক্লিক করি (অর্ডারটি কোনও ব্যাপার না, তবে দ্বিতীয় কারণটি কোনও কারণে 123 হয়।

যেখানে আমি উপরের চেক-বক্সে ক্লিক করি তখন আমি আশা করব যে এটি '5' সম্বলিত একটি তালিকা হবে এবং দ্বিতীয় চেক-বক্সে ক্লিক করলে আমি 5,8 আশা করি, তবে এটি 5,123 হিসাবে সতর্ক হবে, কেন এটি করছে তা সত্যিই দেখবেন না। এই হিসাবে 5==8 মিথ্যা ... কোন ধারনা?

অন্তর্নিহিত সমস্যা সমাধানের জন্য আপডেট করা অ্যালগরিদম:

যদি কেউ এই দরকারীটি খুঁজে পায় তবে আমি আলগোরিদিমকে আরও ভাল বিকল্পে পরিবর্তন করেছি:

var statusList = [];
function updateStatusString(x) {
    if (statusList.length > 0) {
        if (statusList.includes(x)) {
            var idx = statusList.indexOf(x);
            if (idx != -1) {
                statusList.splice(idx, 1);
            }
        }
        else {
            statusList.push(x);
        }
    } else {
        statusList.push(x);
    }
    alert(statusList);
}

কারণ আপনি statusList উপর পুনরাবৃত্তি হয়। প্রথম পুনরাবৃত্তি আপনি 5 == 8 কিনা তারপর চেক করুন, তারপর statusList মধ্যে অন্য অংশ এবং 8 সন্নিবেশ। আপনার স্ট্যাটাসলিস্ট = [5, 8]। পরবর্তী পুনরাবৃত্তির জন্য, এটি সত্য statuslist[i] 8 এবং 8 === 8 হবে এবং আপনার বিবৃতি - statusList[i] = 123; 123 সঙ্গে শেষ সন্নিবেশিত 8 মান প্রতিস্থাপন করা হবে। অতএব, আপনার স্ট্যাটাসলিস্ট অ্যারেটি থাকবে ["5", 123]

var statusList = [];

function updateStatusString(x) {
  const input = parseInt(x);
  if (statusList != null) {
    if (statusList.includes(input)) {
      const idx = statusList.indexOf(input);
      statusList[idx] = 123;
    } else {
      statusList.push(input);
    }
    alert(statusList);
  }
}
<label>&nbsp;<input type="checkbox" name="Active" value="5" onchange=updateStatusString("5")>&nbsp;"Active"</label>

<label>&nbsp;<input type="checkbox" name="NonActive" value="8" onchange=updateStatusString("8")>&nbsp;"Active"</label>


প্রথম পুনরাবৃত্তি:

যেহেতু স্ট্যাটাস তালিকা খালি আছে তাই আপনি 5 টি যোগ করছেন,

দ্বিতীয় পুনরাবৃত্তি:

statulsList = [5]

আপনি 8 যোগ করছেন তাই এখন স্ট্যাটাসলিস্ট মান হল [5,8] যার মানে দৈর্ঘ্য ২,

সুতরাং আমরা একটি তৃতীয় পুনরাবৃত্তি যা এই ক্ষেত্রে 8 === 8।

যদি তালিকায় অন্যান্য আইটেম যুক্ত করার আগে আপনি এটি স্থিতি তালিকার দৈর্ঘ্য সংরক্ষণ করতে চান।

var statusList = [];
function updateStatusString(x) {
    if (statusList != null) {
        if (statusList.length > 0) {
           var lengthStat = statusList.length;
            for (var i = 0; i < lengthStat; i++) {
                if (parseInt(statusList[i]) == parseInt(x)) {
                    statusList[i] = 123;
                } else {
                    if(! (statusList.indexOf(x) != -1))
                        statusList.push(x);
                }
            }
        } else {
            statusList.push(x);
        }
    }
    alert(statusList);
}
<label>&nbsp;<input type="checkbox" name="Active" value="5" onchange=updateStatusString("5")>&nbsp;"Active"</label>
<label>&nbsp;<input type="checkbox" name="NonActive" value="8" onchange=updateStatusString("8")>&nbsp;"Active"</label>






equality