内联数组比较函数



假设我有以下数组比较函数:

function cmp_arrs(a, b) {
if (a === b) return true;
if (a.length != b.length) return false;
for (let i=0; i < a.length; i++)
if (a[i] != b[i]) return false;
return true;
}

我怎么能把这个——特别是for循环——转换成单行javascript箭头函数呢?到目前为止,我有:

const cmp_arrs2 = (a,b) => (a === b) || ((a.length === b.length) && (<forLoop?>))

我目前的方法是将其字符串化,看看是否有效,但这似乎有点粗糙/错误:

const cmp_arrs2 = (a,b) => (a === b) || ((a.length === b.length) 
&& (Object.values(a).toString() == Object.values(b).toString()))

可以使用高阶函数,如.every()。为了让.every()返回true,回调必须为每个项目返回true,如果它为任何项目返回false,那么.every()将导致false。您可以使用回调的第二个参数来获取索引i,以便从数组b中获取相应的元素:

const cmp_arrs2 = (a,b) => 
a === b || a.length === b.length && a.every((elem, i) => elem === b[i]);

&&具有比||更高的运算符优先级,因此如果您愿意,也可以省略分组()

您可以这样做:

// Create a Separate Function
const cmp_loop = (a, b) => {
for (let i=0; i < a.length; i++)
if (a[i] != b[i]) return false;
return true;
}
// Now make a single line function
const cmp_array = (a, b) => (a === b) || ((a.length === b.length) && cmp_loop(a, b))
// You can also do this:
const cmp_array_2 = (a, b) => (a === b) || ((a.length === b.length) && a.reduce((equal, current, index) => !equal ? equal : current === b[index], true))
// Another quick way (If you are sure that the elements in both arrays are on same positions or indexes):
const cmp_array_3 = (a, b) => JSON.stringify(a) === JSON.stringify(b);

相关内容

  • 没有找到相关文章

最新更新