بمجرد إزالة التكرارات ، ابحث عن طول المصفوفة

-5

بمجرد إزالة التكرارات ، ابحث عن طول المصفوفة. أنا أستخدم الكود أدناه لكنه يعود 0 مثل طول المصفوفة:

var mydata = ["1", "2", "3", "3", "4", "5", "5", "6", "7", "7", "8", "9", "9"];

var uniqueNames = [];
$(function() {
  $.each(mydata, function(i, el) {
    if ($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
  });
})
console.log(uniqueNames.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

الطول الاجمالي

13

الناتج المتوقع

9

3 الاجابة

4
افضل جواب

المشكلة هي لأنك تتصل console.log() خارج معالج الأحداث jQuery document.ready ، ومن ثم تقوم بتسجيل الدخول length قبل أن تقوم بإلغاء خداع الصفيف. ضع ال length تحقق داخل المعالج:

var mydata = ["1", "2", "3", "3", "4", "5", "5", "6", "7", "7", "8", "9", "9"];

var uniqueNames = [];
$(function() {
  $.each(mydata, function(i, el) {
    if ($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
  });

  console.log(uniqueNames.length);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

ومع ذلك ، لا تحتاج إلى jQuery على الإطلاق هنا. يهدف jQuery إلى استخدامه كإطار معالجة DOM. تعد طرق JS الأصلية أكثر فعالية للعمل مع المصفوفات:

var mydata = ["1", "2", "3", "3", "4", "5", "5", "6", "7", "7", "8", "9", "9"];

var uniqueNames = mydata.filter((value, index, arr) => {
  return arr.indexOf(value) === index; 
});

console.log(uniqueNames.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

:مؤلف
2
افضل جواب

باستخدام JS الحديث ، يمكن الحصول على الازدواج فقط باستخدام مجموعة ..

على سبيل المثال ..

const myData = ["1","2","3","3","4","5","5","6","7","7","8","9","9"];

const uniqueData = Array.from(new Set(myData));

console.log(myData.join(", "));
console.log(uniqueData.join(", "));
console.log(`length = ${uniqueData.length}`);

:مؤلف
0

يمكنك التحقق lastIndexOf() للعنصر بحيث يتطابق هذا الفهرس الأخير مع الفهرس الحالي. إذا كان الأمر كذلك ، ادفع هذا العنصر للداخل uniqueNames مجموعة مصفوفة. ثم يمكنك أيضًا الحصول على طوله باستخدام uniqueNames.length

var myData = ["1","2","3","3","4","5","5","6","7","7","8","9","9"];
var uniqueNames = [];
myData.forEach((num, index)=>{
  if(myData.lastIndexOf(num) === index){
    uniqueNames.push(num);
  }
});
console.log(uniqueNames);
console.log('length is '+ uniqueNames.length);

باستخدام مرشح ()

var myData = ["1","2","3","3","4","5","5","6","7","7","8","9","9"];
var uniqueNames =  myData.filter((num, index)=> myData.lastIndexOf(num) === index);
console.log(uniqueNames);
console.log('length is '+ uniqueNames.length);

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام