how often does the letter н occur in:
q: как правильно сравнить заменить слово в массиве? у меня есть массив со словами и массив объектов с неправильными словами и их заменами т.е. правильными словами. мне нужно найти в массиве неправильное слово и заменить его с учетом локали (переменная locale).
первый и основной массив выглядит так
let e = [строки, строчка, в строке, на строке, на донышке]

второй массив объектов содержит массив списка плохих слов и правильных, на которые нужно заменить плохие слова в первом массиве.
let o = [{ ru: строка, en: string, wrong: [в строке, в строчке] }, { ru: дно, en: bottom, wrong: [на дне, на донышке] }]

есть так же переменная которая определена как
let locale = ru

мне нужно сделать следующее:
пройтись по всему массиву (е), если в массиве найдено слово из o[*].wrong, то заменить его на o[*][locale] в основном массиве, должно получиться следующее:
e = [строки, строчка, **строка**, на строке, **дно**]


a: в исходном массиве wrong изменил всё на lowercase(), чтобы не париться с регистром (иначе будет заменять только точные совпадения).


let e = [строки, строчка, в строке, на строке, на донышке];

let o = [
  { ru: строка, en: string, wrong: [в строке, в строчке] },
  { ru: дно, en: bottom, wrong: [на дне, на донышке] }
];

let locale = ru;

for (let i = 0; i < e.length; i++) {
  let searching = e[i].tolowercase();
  
  let obj = o.find( obj => obj.wrong.includes(searching) );
  
  if (obj) e[i] = ** + obj[locale] + **;
}

console.log( e );


.includes(элемент) проверяет, есть ли такой элемент в массиве, возвращает true / false.
.find(функция) возвращает первый найденный элемент, для которого вызванная функция вернула true.

если предстоит много таких замен, можно перестроить структуру o, чтобы сразу взять нужное слово, так:


let e = [строки, строчка, в строке, на строке, на донышке];

let o = [
  { ru: строка, en: string, wrong: [в строке, в строчке] },
  { ru: дно, en: bottom, wrong: [на дне, на донышке] }
];

let locale = ru;

let o2 = rearrange_o(o);
/* {
 *   в строке: {ru: строка, en: string},
 *   в строчке: {ru: строка, en: string},
 *   ...
 */

for (let i = 0; i < e.length; i++) {
  let wrong_word = o2[ e[i].tolowercase() ];
  if (wrong_word) e[i] = ** + wrong_word[locale] + **;
}

console.log( e );

/***/
function rearrange_o(o) {
  let result = {};
  
  for (let obj of o) {
    let words = {ru: obj.ru, en: obj.en};
    // это чтобы не создавать лишние объекты для каждого слова.
    
    for (let wrong_word of obj.wrong) {
      result[wrong_word] = words; // они будут ссылаться на один и тот же words
    }
  }
  
  document.body.innerhtml = `<pre>${ json.stringify(result, true, 2) }</pre>`;
  
  return result;  
}




к слову, помимо массива... wrong может хранить и регулярные выражения) хотя в сложных комбиранциях слов, с массивами будет легче работать.


let e = [строки, строчка, в строке, на строке, на донышке];

let o = [
  { ru: строка, en: string, wrong: /^в строч?ке$/i },
  { ru: дно, en: bottom, wrong: /^на д(?:н|онышк)е$/i }
];

let locale = ru;

for (let i = 0; i < e.length; i++) {
  let obj = o.find( obj => obj.wrong.test(e[i]) );
  if (obj) e[i] = ** + obj[locale] + **;
}

console.log( e );



user
In the text, there are one hundred and four "н"s.
assistant