ปัญหา
สมมติว่าสตริงชื่อตัวเลขต่อไปนี้ −
const str = 'TOWNE';
หากเราจัดเรียงสตริงนี้ใหม่ เราจะพบชื่อตัวเลขสองชื่อในนั้น 2 (TWO) และ 1 (ONE)
ดังนั้น เราคาดว่าผลผลิตจะอยู่ที่ 21
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงดังกล่าวและส่งกลับตัวเลขที่มีอยู่ในสตริง
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const str = 'TOWNE'; const findNumber = (str = '') => { function stringPermutations(str) { const res = []; if (str.length == 1) return [str]; if (str.length == 2) return [str, str[1]+str[0]]; str.split('').forEach((chr, ind, arr) => { let sub = [].concat(arr); sub.splice(ind, 1); stringPermutations(sub.join('')).forEach(function (perm) { res.push(chr+perm); }); }); return res; } const legend = { 'ONE': 1, 'TWO': 2, 'THREE': 3, 'FOUR': 4, 'FIVE': 5, 'SIX': 6, 'SEVEN': 7, 'EIGHT': 8, 'NINE': 9, 'ZERO': 0 }; const keys = Object.keys(legend); const res = {}; const resArr = []; let result = ''; keys.forEach(key => { const match = stringPermutations(key).find(el => el.split('').every(char => str.includes(char))); if(match){ const index = str.indexOf(match[0]); if(!res.hasOwnProperty(key)){ res[key] = [index]; }else if(!res[key].includes(index)){ res[key].push(index); }; }; }); Object.keys(res).forEach(word => { resArr.push([word, ...res[word]]); }); resArr.sort((a, b) => a[1] - b[1]); resArr.forEach(sub => { result = result + String(legend[sub[0]]).repeat(sub.length - 1); }); return +result; }; console.log(findNumber(str));
ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
21