首先,我不是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);
}