代码之家  ›  专栏  ›  技术社区  ›  Evan Carroll

当不关心结果时,javascript会迭代列表中的两个元素?

  •  1
  • Evan Carroll  · 技术社区  · 5 年前

    假设我有一个列表

    let chain = [ 1, 9, 61, 798 ];
    

    这些基本上是路由上的非规范化节点,我想添加 edges 在数据库中。理想情况下,我要找的是 addEdge(node,parent) 对于列表中的每两个元素。 我在找拉姆达的方法。

    它会给混合带来什么独特的能力吗?我想用 .reduceRight() 从核心javascript,

    [ 1, 9, 61, 798 ].reduceRight( (acc,v) => {
      addEdge(acc,v);
      return v
    }, undefined );
    

    但在这种情况下, .reduceRight 返回一些东西,在虚无的环境中使用它似乎很奇怪。有更好的方法吗?

    2 回复  |  直到 5 年前
        1
  •  3
  •   Scott Christopher    5 年前

    你可以使用 R.aperture 生成包含给定大小的连续元素的新数组。

    const nodes = [1, 9, 61, 798]
    const edges = R.aperture(2, nodes)
    
    console.log(edges) //=> [[1, 9], [9, 61], [61, 798]]
    <script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>

    那你也可以 map forEach 在包含节点对的结果数组上。

        2
  •  0
  •   Matías Fidemraizer    5 年前

    下面是一个普通的javascript方法:

    const range = (from, to) => {
      const output = []
    
      for (let i = from; i < to; i++)
        output.push (i)
    
      return output
    }
    
    const pairize = xs =>
      range (0, xs.length - 1)
      .map (i => [xs[i], xs[i + 1]])
    
    
    const nodes = [1, 9, 61, 798]
    const edges = pairize (nodes)
    
    console.log (edges)