tengo dos matrices
matriz número 1:
let search = ['ا', 'ب', 'ج', 'د', 'ه','و', 'ز', 'ح', 'ط', 'ي','ك', 'ل', 'م', 'ن', 'س','ع', 'ف', 'ص', 'ق', 'ر','ش', 'ت', 'ث', 'خ', 'ذ','ظ', 'ض', 'غ'];matriz número 2:
let replace = ['1', '2', '3', '4', '5','6', '7', '8', '9', '10','20', '30', '40', '50', '60','70', '80', '90', '100', '200','300', '400', '500', '600', '700','800', '900', '1000'];y esta es una entrada:
let word = "محمد"; Quiero en javascript buscar las letras de la word variable y reemplazarlas con el equivalente del número en la matriz de replace . La matriz de reemplazo y la matriz de búsqueda tienen la misma cantidad de letras y números.
La salida será:
م 40 ح 8 م 40 د 4 total = 92 let word = "محمد"; let search = ['ا', 'ب', 'ج', 'د', 'ه', 'و', 'ز', 'ح', 'ط', 'ي', 'ك', 'ل', 'م', 'ن', 'س', 'ع', 'ف', 'ص', 'ق', 'ر', 'ش', 'ت', 'ث', 'خ', 'ذ', 'ظ', 'ض', 'غ']; let replace = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100', '200', '300', '400', '500', '600', '700', '800', '900', '1000']; if (word === "") { document.write('the field is empty'); } else { w = word.split("").filter(function(ele) { return ele.replace(search, replace); }).map(function(ele) { return ele + ele; }); } console.log(w);Suponiendo que quiso decir que el resultado esperado era 92, puede hacerlo dividiendo la entrada, luego encontrando el índice del elemento en find y agregando el resultado usando reduce buscando el valor de replace
let search = ['ا', 'ب', 'ج', 'د', 'ه','و', 'ز', 'ح', 'ط', 'ي','ك', 'ل', 'م', 'ن', 'س','ع', 'ف', 'ص', 'ق', 'ر','ش', 'ت', 'ث', 'خ', 'ذ','ظ', 'ض', 'غ']; let replace = ['1', '2', '3', '4', '5','6', '7', '8', '9', '10','20', '30', '40', '50', '60','70', '80', '90', '100', '200','300', '400', '500', '600', '700','800', '900', '1000']; let word = "محمد"; let result = word.split("") .map(x => search.indexOf(x)) .reduce( (acc,i) => acc + parseInt(replace[i],10),0); console.log(result); Podría mejorar esto almacenando números enteros en su matriz de replace , lo que negaría la necesidad de parseInt
Sugeriría crear un mapa para las dos matrices:
let word = "محمد"; let search = ['ا', 'ب', 'ج', 'د', 'ه', 'و', 'ز', 'ح', 'ط', 'ي', 'ك', 'ل', 'م', 'ن', 'س', 'ع', 'ف', 'ص', 'ق', 'ر', 'ش', 'ت', 'ث', 'خ', 'ذ', 'ظ', 'ض', 'غ']; let replace = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100', '200', '300', '400', '500', '600', '700', '800', '900', '1000']; let map = Object.fromEntries(search.map((letter, i) => [letter, replace[i]])); let w = Array.from(word, letter => map[letter]).filter(Boolean); console.log(w); // If you want to have a concatenated string: console.log(w.join(",")); // Or a sum: console.log(w.reduce((a, b) => a + +b, 0)); Nota: si su intención es sumar o hacer otros cálculos numéricos, sugeriría que la matriz de replace sea una matriz de números , no de cadenas .
Lógica
search .replace .violín de trabajo
let word = "محمد"; let search = ['ا', 'ب', 'ج', 'د', 'ه', 'و', 'ز', 'ح', 'ط', 'ي', 'ك', 'ل', 'م', 'ن', 'س', 'ع', 'ف', 'ص', 'ق', 'ر', 'ش', 'ت', 'ث', 'خ', 'ذ', 'ظ', 'ض', 'غ']; let replace = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '20', '30', '40', '50', '60', '70', '80', '90', '100', '200', '300', '400', '500', '600', '700', '800', '900', '1000']; let sum = 0; word.split("").forEach(letter => { const index = replace[search.indexOf(letter)]; console.log(`${index} ${letter}`) sum += +index; }); console.log(`total = ${sum}`)