Javascript Coffeescript:数组元素与另一个数组匹配
我有两个阵列:Javascript Coffeescript:数组元素与另一个数组匹配,javascript,node.js,coffeescript,Javascript,Node.js,Coffeescript,我有两个阵列: array1 = ["hello","two","three"] array2 = ["hello"] 我想检查array2是否包含1个或多个array1单词 如何使用Coffeescript实现这一点?找到了一种方法,可以使用此Coffeescript检查两个数组之间的交集。咖啡脚本看起来非常棒 如果元素相交后生成的数组至少包含一项,则两个数组都有公共元素 试试看。我已经做了一个函数,看看我的例子: array1 = ["hello","two","three"] array
array1 = ["hello","two","three"]
array2 = ["hello"]
我想检查array2是否包含1个或多个array1单词
如何使用Coffeescript实现这一点?找到了一种方法,可以使用此Coffeescript检查两个数组之间的交集。咖啡脚本看起来非常棒 如果元素相交后生成的数组至少包含一项,则两个数组都有公共元素
试试看。我已经做了一个函数,看看我的例子:
array1 = ["hello","two","three"]
array2 = ["hello"]
is_in = (array1, array2) ->
for i in array2
for j in array1
if i is j then return true
console.log is_in(array1, array2)
在查看交叉口示例后,我可以通过另一种方式实现这一点:
intersection = (a, b) ->
[a, b] = [b, a] if a.length > b.length
return true for value in a when value in b
array1 = ["hello","two","three"]
array2 = ["hello"]
console.log intersection(array1, array2)
您可以尝试:
(true for value in array1 when value in array2).length > 0
(在
array1
中反转数组以显示双条目)我想我会抛出我自己的咖啡脚本一行的疯狂:-p
true in (val in array1 for val in array2)
以防万一有人来到这里,寻找与十字路口不同的地方
difference = (val for val in array1 when val not in array2)
这将为您提供一个数组(差异),其中包含array1中的所有值,而不是array2中的值Hmmm,我对第一行感到非常困惑,CoffeeScript的核心好处之一应该是提高JS的清晰度和可读性,对吗?也许这是一些聪明但复杂的代码的一种情况,只有当它实际上比@alessioalex提供的更清晰的代码更有效时才应该使用。@GregL-你是说这行-
intersection=(a,b)->
?对不起,不,我是说第2行,它是intersection函数的第一行。到目前为止,我已经学会了足够的CS语法,能够阅读第一行。:-)更重要的是,我不明白那一行是如何工作的。第2行只是交换a和b,如果必要的话,以确保b比a长。这减少了后续for循环中的迭代次数。我发现这实际上相当清晰(for循环及其隐式理解和返回更令人困惑)。@GregL-这只是一个并行赋值,很少有语言支持在不需要第三个临时变量的情况下交换两个变量的值。我同意,虽然语法有点不直观,可能是因为括号类似于数组。在Ruby中,我们可以使用-a,b=b,a if(a.length>b.length)
做同样的事情。在Ruby中,将if条件放在语句末尾的构造是我开始喜欢的。在JavaScript中,它们被称为。前者更容易理解-我想知道是否有人想为此创建一个jsPerf.com测试,看看您第二次发布的交集代码是否有任何好处。您可以自己创建一个jsPerf测试。单击两个“testhere”链接,然后从那里获取编译后的JavaScript代码。然后创建一个包含2个案例的jsPerf。
true in (val in array1 for val in array2)
difference = (val for val in array1 when val not in array2)