发现匹配后删除阵列中所有元素的Lodash方法?

时间:2018-02-22 07:14:59

标签: javascript node.js reactjs react-native lodash

我浏览过Lodash文档很多,似乎无法找到我正在寻找的内容。

我想知道Lodash是否有方法或简单的方法组合,一旦检测到某个匹配,就会删除数组中的所有剩余元素,包括匹配本身。

例如:

WKWebView

2 个答案:

答案 0 :(得分:2)

这可以使用Array对象的indexOf和splice函数来实现。以下是使用Lodash和javascript函数的实现

blogArray.splice(0,blogArray.indexOf(matchingEl))

_.slice(blogArray, 0, _.findIndex(blogArray, function(k){return k == matchingEl;}) 

答案 1 :(得分:1)

这对我很可爱

_.doAThing(blogArray)

因为它大胆地体现了一种名为一厢情愿的的编程技巧 - 它捕捉到了这样的想法:你的程序就像你想要的一样优雅;制作一根魔杖,在一些参数上挥动它,你的程序就可以了!它确实如此,我们只需要写_.doAThing ...

我们可以使用递归轻松遍历数组。要设计递归函数,我们有一个 base 案例和归纳案例

  • 基本情况 - items为空,返回空数组
  • 归纳案例1 - items 为空,因此我们至少有一个元素 - 如果first项匹配{{1我们已经完成了,没有任何要素可以遵循;返回空数组。
  • 归纳案例2 - 'https'匹配,将first项与项first的递归结果连接起来。
rest

好的,所以这正是我想要表达的const doAThing = (items = []) => isEmpty (items) ? [] : first (items) === 'https' ? [] : [ first (items) ] .concat (doAThing (rest (items))) - 我的想法是我一直保持希望功能。现在我只需要写doAThingisEmptyfirst

rest

allakhazam!像魔法一样,你的程序已经完成。请注意,我们可以使用const isEmpty = (items = []) => items.length === 0 const first = (items = []) => items [0] const rest = (items = []) => items.slice (1) 折叠前两个案例,因为每个案例都返回相同的||

[]

明显的改进是使const doAThing = (items = []) => isEmpty (items) || first (items) === 'https' ? [] : [ first (items) ] .concat (doAThing (rest (items))) const isEmpty = (items = []) => items.length === 0 const first = (items = []) => items [0] const rest = (items = []) => items.slice (1) const data = ["check", "out", "my", "blog", "https", "someblog", "com"] console.log (doAThing (data)) // [ 'check', 'out', 'my', 'blog' ]匹配函数的参数

https