javascript - ম্যানুয়াল সূচক ছাড়া জাভাস্ক্রিপ্টে কীভাবে অক্ষরের গ্রেডগুলি সাজানো যায়




sorting (5)

অক্ষরের গ্রেডগুলির অ্যারে কীভাবে সঠিকভাবে সাজানো যায় তা বোঝার চেষ্টা করছেন ['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'F'] । স্ট্যান্ডার্ড বাছাইয়ের কাজটি এটি করে না। আমি প্রতিটি চিঠি গ্রেডের জন্য ম্যানুয়াল সূচক সেট না করেও এটি করার চেষ্টা করছি।

const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']

grades.sort((a, b) => {
    return a - b;
});

console.log(grades);

প্রত্যাশিত আউটপুট:

['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'F']


আপনি গ্রেডগুলি পৃথক করতে এবং পোস্টফিক্স প্রতীকগুলির জন্য কোনও বিষয় নিতে পারেন।

const grades = ['B+', 'A', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'F']

grades.sort((a, b) => {
    const order = { '+': -1, '-': 1, undefined: 0 };
    return a[0].localeCompare(b[0]) || order[a[1]] - order[b[1]];
});

console.log(...grades);


আপনি যদি কেবল এএসসিআইআই মানগুলিতে আটকে থাকতে চান:

const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']

grades.sort((a, b) =>
  a.charCodeAt(0) === b.charCodeAt(0) // If the letters are the same
  ? (a.charCodeAt(1) || 44) - (b.charCodeAt(1) || 44) // Just compare the postfix
  : a.charCodeAt(0) - b.charCodeAt(0) // Otherwise compare the letters
);

console.log(...grades);

+ এর ACII মান 43 এবং ASCII মান 45 - তাই কোনও পোস্টফিক্স না থাকলে আমরা 44 ব্যবহার করতে পারি (যা হয়)।

বিকল্পভাবে, টেম্পলেট আক্ষরিক ব্যবহার:

const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']

grades.sort((a, b) =>
  a.charCodeAt(0) === b.charCodeAt(0) 
  ? `${a},`.charCodeAt(1) - `${b},`.charCodeAt(1)
  : a.charCodeAt(0) - b.charCodeAt(0)
);

console.log(...grades);


আসলে আপনি যা ভাবেন তার চেয়ে সহজ:

const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']


res = grades
    .map(x => x + ',')
    .sort()
    .map(x => x.slice(0, -1))

console.log(res.join())

এখানে "যাদু" হ'ল , আস্কি টেবিলের মধ্যে + এবং - মধ্যে ঠিক, সুতরাং A হয়ে যায় এবং A+ এবং A-

নিনা যেমন পরামর্শ দিয়েছে, আপনি +, জিনিসটি ঠিক sort কলব্যাকের মধ্যেও রাখতে পারেন:

const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']

let cmp = (x, y) => (x > y) - (x < y);

res = grades.sort((x, y) => cmp(x + ',', y + ','))

console.log(...res)

যেখানে <=> অপারেটরের জন্য দরিদ্র ব্যক্তির প্রতিস্থাপন


এখানে সহজ গণিত ব্যবহার করে আমার সমাধান Here:

const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']

const getCounter = (letter) => {
  // Making simple math to sort it out
  let letterCounter = letter.charCodeAt(0) * 10;
  if(letter[1] === "+"){
    letterCounter -= 1;
  }
  else if(letter[1] === "-"){
    letterCounter += 1;
  }
  return letterCounter;
}

grades.sort((a, b) => {
  return getCounter(a) - getCounter(b);
});

console.log(grades)
// Print => ['A+','A','A-','B+','B','B-','C+','C','C-','D+','D','D-','F']


এটি করার কয়েকটি উপায়। একটি উপায় হ'ল অক্ষরগুলিতে বিভক্ত হওয়া এবং অংশগুলি তুলনা করা।

const grades = ['B+', 'A', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'F']
const sorted = grades.sort((a, b) => {
  if (a === b) return 0 // if equal nothing changes
  const ap = a.split('') // separate into letter and sign
  const bp = b.split('')
  if (ap[0] === bp[0]) { // if first letter is the same, we have to check second
    return (ap[1] === "+" || b[1] === "-") ? -1 : 1
  }
  return ap[0].localeCompare(b[0]) // sort by letter grade
})
console.log(sorted)






sorting