【问题标题】:How to check array equality with reduce, using destructuring and recursion?如何使用reduce,使用解构和递归检查数组是否相等?
【发布时间】:2019-03-15 00:31:54
【问题描述】:

如何使用 reduce 帮助器、解构和递归检查两个数组是否相等?

const isEqual = (arr1, arr2) => {
  // use reduce helper to check arrays for equality, use destructuring and recursion
}

所以显然isEqual([1,2,3], [1,2,3]) 应该返回true,而isEqual(["hello", "there"], ["good", "morning"]) 应该返回false

【问题讨论】:

  • 请添加所需方法的示例。例如,您想用reduce 做什么?

标签: javascript recursion ecmascript-6 reduce destructuring


【解决方案1】:

您可以在比较之前使用JSON.stringify() 对数组进行字符串化:

const isEqual = (arr1, arr2) => {
  var flag = JSON.stringify(arr1)==JSON.stringify(arr2)? true : false;
  return flag;
}
console.log(isEqual([1,2,3], [1,2,3])); //true
console.log(isEqual(["hello", "there"], ["good", "morning"])); //false
console.log(isEqual([1, '2', 3], [1,2,3])); //false

【讨论】:

  • @I_ATE_YOUR_WORK_FILES,你认为数字和数字的字符串表示是否相等?
  • @I_ATE_YOUR_WORK_FILES,请查看更新的答案以检查函数如何为您提供的输入返回 false......谢谢..
  • 哇,太棒了!看起来我学到了一些很酷的东西......真的非常感谢!删除了我的误导性评论
  • 这是一个聪明而伟大的想法,易于实现,易于理解,我正准备考虑一些递归算法。但是,我建议你 .toLowerCase() 两个 json 以确保比较不区分大小写(如果需要)
  • @Cid 如果你真的想要不区分大小写,那么使用.toLocaleLowerCase 否则你会在土耳其遇到问题,iI 不是同一个字母的不同大小写,而是带有一个不区分区域设置的大小写转换,它们突然就这样了。
【解决方案2】:

您可以使用spread syntax ... 采用递归方法并检查元素并检查长度'。

const isEqual = ([v, ...a], [w, ...b]) => {
    return v === w && a.length === b.length && (a.length === 0 || isEqual(a, b));
}

console.log(isEqual([1, 2], [1, 2, 3]));
console.log(isEqual([1, 2, 3], [1, 2, 3]));
console.log(isEqual([1, 2, 3, 4], [1, 2, 3]));
console.log(isEqual(["hello", "there"], ["good", "morning"]));

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 2021-04-15
    • 2021-11-19
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2019-03-23
    相关资源
    最近更新 更多