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

ตรวจสอบว่าสตริงเป็นการรวมของสตริงในอาร์เรย์ด้วย JavaScript


เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของสตริงเป็นอาร์กิวเมนต์แรก และสตริงเป็นอาร์กิวเมนต์ที่สอง

ฟังก์ชันควรตรวจสอบว่าสตริงที่ระบุโดยอาร์กิวเมนต์ที่สองสามารถสร้างได้โดยการรวมสตริงของอาร์เรย์ในทุกวิธีที่เป็นไปได้

ตัวอย่างเช่น ถ้าอินพุทอาร์เรย์คือ

const arr = ["for","car","keys","forth"];

และสตริงคือ

const str = "forthcarkeys";

ผลลัพธ์ควรเป็น true เพราะสตริงเป็นการรวมขององค์ประกอบที่ดัชนี 3, 1 และ 2 ของอาร์เรย์

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

โค้ดสำหรับการทำงานนี้จะเป็นดังนี้

const arr = ["for","car","keys","forth"]; const str = "forthcarkeys"; 
const checkPossibility = (str = '', arr = []) => { 
  let possibilities = arr.reduce(function (r, a) { 
    let p = str.indexOf(a); 
    while (p !== -1) { 
      r.push({ word: a, position: p }); 
      p = str.indexOf(a, p + 1); 
    } 
    return r; 
  }, []); 
  const findRecursively = (i, t) => { 
    let s = t.slice(), j; 
    if (i === possibilities.length) { 
      return !t.join(''); 
    } 
    if (possibilities[i].word.split('').every(function (c, j) { 
      return s[j + possibilities[i].position] !== ''; 
    })) { 
      for (j = 0; j < possibilities[i].word.length; j++) { 
        s[j + possibilities[i].position] = ''; 
      } 
    } 
    return findRecursively(i + 1, s) || findRecursively(i + 1, t); 
  } 
  return findRecursively(0, str.split('')); 
}; 
console.log(checkPossibility(str, arr));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้

true