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

ตรวจสอบว่า สร้างอาร์เรย์เป้าหมายจากอาร์เรย์ต้นทางได้หรือไม่ใน JavaScript

เราได้รับอาร์เรย์ของจำนวนเต็มที่แตกต่างกัน สมมติว่า arr และอีกอาร์เรย์หนึ่งของอาร์เรย์จำนวนเต็ม สมมติว่า sourceArr ในอาร์เรย์ sourceArr จำนวนเต็มแตกต่างกัน เราควรเขียนฟังก์ชันที่สร้าง arr โดยการต่ออาร์เรย์ใน sourceArr ในลำดับใดก็ได้ อย่างไรก็ตาม เราไม่สามารถจัดเรียงใหม่จำนวนเต็มภายในซับอาร์เรย์ใน sourceArr ได้ เราควรคืนค่า true หากสามารถสร้างอาร์เรย์ arr จาก sourceArr ได้ false ถ้าไม่ได้

เช่น:

const arr = [23, 67, 789];
const sourceArr = [[23], [789, 67]];

ฟังก์ชันควรคืนค่า false เพราะเราไม่สามารถจัดเรียงใหม่สมาชิกภายในซับอาร์เรย์ และโดยไม่มีการจัดเรียงใหม่ เราไม่สามารถบรรลุ arr เป้าหมายได้

ตัวอย่าง

const arr1 = [23, 67, 789];
const arr2 = [23, 789, 67];
const sourceArr = [[23], [789, 67]];
const validFormation = (arr, sourceArr) => {
  const indexes = new Array(100);
  let arrIndex = 0;
  let index;
  for (let i = 0; i < sourceArr.length; ++i) {
    indexes[sourceArr[i][0]] = i;
  }
  while (arrIndex < arr.length) {
    index = indexes[arr[arrIndex]];
    if (index === undefined) return false;
    for (let j = 0; j < sourceArr[index].length; ++j) {
      if (arr[arrIndex] !== sourceArr[index][j]) return false;
      ++arrIndex;
    }
  }
  return true;
};
console.log(validFormation(arr1, sourceArr));
console.log(validFormation(arr2, sourceArr));

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ดังนี้:

false true