Прежде всего, я не пользователь Vue.js, но сделать рекурсию довольно просто.Проблема, с которой вы сталкиваетесь, связана с тем, что функция является анонимной.По определению они не могут быть рекурсивными (если они не назначены дескриптору, подобному переменной или имени), потому что у них нет дескриптора, который мог бы вызвать себя.Чтобы решить эту проблему, просто сначала сохраните функцию в переменной (или создайте именованную функцию).
let filter = (x, y) => {
if (x.length != y.length) return false;
if (!(x instanceof Array)) return x == y;
if (!(y instanceof Array)) return false;
for (let i = 0; i < x.length; i++) {
if (!filter(x[i], y[i])) return false;
}
};
Vue.filter('arraysAreEquals', filter);
Назначая анонимную функцию переменной, мы создали простой дескриптор, который мы можем вызывать внутрифункция.
При использовании этого подхода помните, что не следует переназначать переменную filter
, так как это повлияет на рекурсивный вызов.
let kaas, other;
kaas = (baas = false) => baas ? 'baas' : kaas(true);
console.log('kaas() //=>', kaas());
other = kaas;
console.log('other() //=>', other());
kaas = true;
try {
console.log('other() //=>', other());
} catch (error) {
console.error(error.message);
}