Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การจัดเรียงอาร์เรย์ค่าบูลีน (0 และ 1) - JavaScript

จัดเรียงอาร์เรย์ที่มีแค่ 0 และ 1 ให้ 1 อยู่หน้า 0 อยู่หลัง

ตัวอย่าง

Input:  [1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1]
Output: [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]

ตัวอย่างโค้ด

const arr = [1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1];

const sortBinary = arr => {
  const copy = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === 0) copy.push(0);
    else copy.unshift(1); // 1 ใส่หน้า
  }
  return copy;
};

console.log(sortBinary(arr));

วิธีที่ดีกว่า

// นับจำนวน 1 แล้วสร้างอาร์เรย์ใหม่
const sortBinary = arr => {
  const ones = arr.filter(x => x === 1).length;
  return [...Array(ones).fill(1), ...Array(arr.length - ones).fill(0)];
};

// หรือใช้ sort
const sortBinary = arr => [...arr].sort((a, b) => b - a);

ผลลัพธ์

[ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 ]