Yes, I want a character "translate" function in javascript like that in php. I made the following, but it is ghastly. Surely there must be a better way -- using regular expressions?
<html>
<head>
<script>
window.onload = function() { 
  "use strict";
  console.log(translate("abcdefg", "bdf", "XYZ")); // gives aXcYeZg -=-=-
}
function translate(v1, xlatfrom, xlatto) {
  var ch, ipos, retstr = "";
  if (xlatfrom.length != xlatto.length) return ""; // lengths must be =
  for (var i1=0; i1<v1.length; i1+=1) { // go through string
    ch = v1.substring(i1, i1+1); // character by character
    ipos = xlatfrom.indexOf(ch); // ck if in xlatfrom
    if (ipos >= 0) ch = xlatto.substring(ipos, ipos+1); // if yes, replace
    retstr += ch; } // build up return string
  return retstr;
}
</script>
</head>
<body>
</body>
</html>
EDIT: I've accepted the @dani-sc answer. I'm not going to pursue performance. But it's so DIDACTIC! And thanks for the "spread operator" info. Here's how I might use his answer:
function translate(v1, xlatfrom, xlatto) { // like the PHP translate
 var mapobj = strsToObject(xlatfrom, xlatto); // make str1.ch's:str2ch's object
 return [...v1].map(ch => mapobj[ch] || ch).join(''); // ... is js "spread operator"
}
function strsToObject(str1, str2) { // make object from strings
  if (str1.length != str2.length) return {}; // lengths must be =
  var retobj = {};
  for (var i1=0; i1<str1.length; i1+=1) { // just str[i1]: str2[i1]
    retobj[str1.substring(i1, i1+1)] = str2.substring(i1, i1+1); }
  return retobj;
}
or (this is GREAT! THANKS!)
function translate(v1, xlatfrom, xlatto) { // like the PHP translate
  if (xlatfrom.length != xlatto.length) return ""; // lengths must be =
  var mapobj = {}; // make object for mapping
  for (var i1=0; i1<xlatfrom.length; i1+=1) { // just str[i1]: str2[i1]
    mapobj[xlatfrom.substring(i1, i1+1)] = xlatto.substring(i1, i1+1); }
  return [...v1].map(ch => mapobj[ch] || ch).join(''); // ... is js "spread operator"
}