Делаем ровно то, что спрошено:
const { length: result } = Array.prototype.filter.call(
newWord,
Set.prototype.has.bind(new Set(glas))
);
Или, можно решить задачу в общем виде - сделаем функцию, находящую совпадающие элементы у любых итерируемых объектов. Причём под совпадением будем понимать не обязательно непосредственное равенство (оставим это как вариант по умолчанию), а равенство некоторых производных значений:
function intersection(data1, data2, key = n => n) {
const getKey = key instanceof Function ? key : n => n[key];
const keys = new Set(Array.from(data2, getKey));
return data1[Symbol.iterator]().filter(n => keys.has(getKey(n)));
}
В вашем случае применять так:
const result = intersection(newWord, glas).reduce(acc => ++acc, 0);
// или, без учёта регистра
const result = intersection(newWord, glas, n => n.toLowerCase()).toArray().length;
Другие примеры использования:
Array.from(intersection(Array(7).keys(), Array(4).keys())) // [0, 1, 2, 3]
[...intersection([ { id: 1 }, { id: 2 } ], [ { id: 2 }, { id: 3 } ], 'id')] // [{id: 2}]