在字符串末尾出现一个单词 - underscore.js

时间:2016-03-05 06:00:13

标签: underscore.js

我有2个阵列

array1 = ["e4dfda158c82cc931e2479e32bde42defacebook", "5824fb40c4a97e21ef9715ea69c1cfb9twitter", "6da098061f82c215f37a4949b1555e26linkedinpage"]
array2 = ["facebook", "twitter", "linkedin", "xing", "weibo", "instagram", "googleplus", "pinterest"]

我想比较这两个数组,并像下面的

一样得出
output = ["facebook", "twitter", "linkedin"]

尝试和工作 - 我需要一个执行相同的下划线.js方式

array2.forEach(function(data) {
    array1.forEach(function(data2) {
         n = data2.indexOf(data);
         if(n!=-1) {
            console.log(data)
        }
    })
})

1 个答案:

答案 0 :(得分:1)

使用的方法:chainmapfind.value()是链条的一部分。

var output = _.chain(array1).map(function (el1) {
  return _.find(array2, function (el2) {
    return el1.indexOf(el2) > 1;
  });
}).compact().value();

JS Bin demo

由于对数组进行了多次操作,因此链式方法仅用于外观,通过将第一个操作的结果数组赋值给一个值,然后将该数组发送到相应的下一个操作函数调用中,您始终可以执行下一个操作作为一个论点。

<强>地图:

  

通过转换函数(iteratee)映射列表中的每个值,生成一个新的值数组。迭代器传递三个参数:值,然后是迭代的索引(或键),最后是对整个列表的引用。

Map返回一个与发送到其中的旧数组长度相同的新数组。它迭代旧数组的每个值,并将新值推送到由transform函数返回的new。

<强>查找

  

查看列表中的每个值,返回通过真值测试(谓词)的第一个值,如果没有值通过测试,则返回undefined。

真值测试由&#34;谓词&#34;的返回值确定为真或假。你传入的回调函数。

使用find迭代值的好处是,一旦下划线找到匹配,它将知道停止迭代数组并节省宝贵的计算时间。

<强>紧凑

  

返回删除了所有falsy值的数组副本。在JavaScript中,false,null,0,&#34;&#34;,undefined和NaN都是假的。

Compact更改数组的长度。这可能不是您想要做的,特别是如果您依赖于结果数组与源数组相同。 Compact会过滤掉所有未定义的数据。

如果你不打算使用契约,你根本不需要链,你的代码就会像这样使用地图:

var output = _.map(array1, function (el1) {
  return _.find(array2, function (el2) {
    return el1.indexOf(el2) > 1;
  });
});