เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของสตริงเป็นอาร์กิวเมนต์แรก และสตริงเป็นอาร์กิวเมนต์ที่สอง
ฟังก์ชันควรตรวจสอบว่าสตริงที่ระบุโดยอาร์กิวเมนต์ที่สองสามารถเกิดขึ้นได้หรือไม่โดยการรวมสตริงของอาร์เรย์ในลักษณะที่เป็นไปได้
ตัวอย่างเช่น − หากอาร์เรย์อินพุตคือ −
const arr = ["for","car","keys","forth"];
และสตริงคือ −
const str = "forthcarkeys";
ผลลัพธ์ควรเป็นจริง เพราะสตริงคือการรวมกันขององค์ประกอบที่ดัชนี 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