Не понимаю почему не работает for правильно?
const arr = ["воз", "киборг", "корсет", "ЗОВ", "гробик", "костер", "сектор"];
const map = new Map();
const result = [];

arr.forEach(item => map.set(item.toLowerCase().split("").sort().join(""), item));

for (let item of map.values()) result.push(item);

console.log(result); // ["ЗОВ", "гробик", "сектор"]
arr — исходные строки.
arr2 — сортированные.
Исходные строки, скорее всего, не будут совпадать ни с одной из сортированных — потому arr2[i]==sarr[j] во втором фрагменте, скорее всего, не выполнится.
Я бы поступил таким образом. Сделал бы индексированный список сортированных строк и порядковый массив исходных. Поиск сортированной строки в индексированном списке. Если не обнаружена — сортированную в индексированный, исходную в порядковый.
Что в JS будет индексированным списком — просто не знаю. Вероятно, можно обойтись массивом, присвоив sortedList[arr2[i]] = 1. Вот только как найти то, есть ли?
UPD. Можно также воспользоваться хранилищем «ключ-значение»: ключом будет сортированная строка, значением — исходная. iamevg_ так и поступил. Единственная засада (которая хороша или плоха, в зависимости от задачи) — портит порядок строк.