javascript - 过滤器在此功能中的作用是什么?我们如何归还我们归还的东西?

标签 javascript

下面的代码是如何工作的?

function areSimilar(a, b) {
const ad = a.filter((v,i)=>v!=b[i])
const bd = b.filter((v,i)=>v!=a[i])
return ad.length == 0 || (ad.length == 2 && ad.join('') == 
bd.reverse().join(''))
}

最佳答案

如果您还不知道,filter 是一个高阶数组函数,它将谓词函数作为参数,对数组的每个元素运行该函数,并返回一个仅包含谓词所针对的元素的新数组返回真。更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter .

a.filter((v, i) => v != b[i]) 的情况下, 的每个 a[i]正在测试 a 是否等于 b[i]。如果相等,则过滤掉。生成的数组 ad 将仅包含数组之间不同的 a 元素。与 bd 相同。

如果 ad 的长度为 0,则 a 和 b 之间没有区别,因此函数返回 true。下一部分取决于“相似”的定义——作者的意图似乎是将两个数组标记为相似,如果它们是相同的,或者如果它们具有所有相同的元素,但只有一对元素交换。

如果交换了一对元素,那么 ad 和 bd 中将恰好有两个元素 - 但它们的内容将被交换,因此作者将 bd 反转,然后检查它是否与 ad 相同。

例子:

let a = [1, 2, 3, 4]
let b = [1, 4, 3, 2]

然后,ad == [2, 4]bd == [4,2] 所以 ad.join('') == bd .reverse().join('')

注意:连接是为了让数组可以作为值进行比较,因此最终比较将是 "24"=== "24"

关于javascript - 过滤器在此功能中的作用是什么?我们如何归还我们归还的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58465117/

相关文章:

javascript - 无法访问catch javascript中的变量

javascript 文本解释为脚本

javascript 样式表转换器不工作

javascript - 确定弹出窗口在哪里弹出

javascript - 后续的 POST 不会更新弹出窗口中的内容

javascript - 防止 $( document ).mousemove 上的事件捕获

javascript - 制作简单的按钮来自动滚动到下一个和上一个 Id'd 元素

javascript - HTML5 可点击 Canvas 元素?

javascript - 使用函数调用调用 jquery 弹出窗口

javascript - cakephp onclick更改图像,放置id和函数调用