Javascript中的函数循环与非函数循环

Javascript中的函数循环与非函数循环,javascript,functional-programming,Javascript,Functional Programming,我想做的是返回一个基于动态大小的对象数组,我觉得这样做可能过于复杂,但我现在也在尝试以更实用的方式做事情 下面是我将如何以非功能性的方式来做这件事 功能无效(大小){ 设foo=[]; for(让索引=0;索引{ 返回{ 酒吧:“巴兹” } }); } 这是以功能性方式实现这一点的最佳方式吗 与“传统”方式相比,这种方式有哪些优点/缺点 这真的与函数式编程有关吗 我会做(不一定更好): 您的函数方式可读性较差(IMO),它会创建两个不必要的中间数组(引擎可能会对其进行优化,但……很可能会)

我想做的是返回一个基于动态大小的对象数组,我觉得这样做可能过于复杂,但我现在也在尝试以更实用的方式做事情

下面是我将如何以非功能性的方式来做这件事

功能无效(大小){
设foo=[];
for(让索引=0;索引
下面是我如何以一种实用的方式来做这件事

功能(尺寸){
返回[…新数组(大小)].map(()=>{
返回{
酒吧:“巴兹”
}
});
}
  • 这是以功能性方式实现这一点的最佳方式吗
  • 与“传统”方式相比,这种方式有哪些优点/缺点
  • 这真的与函数式编程有关吗
  • 我会做(不一定更好):

  • 您的函数方式可读性较差(IMO),它会创建两个不必要的中间数组(引擎可能会对其进行优化,但……很可能会)

  • “功能性/命令性编程”不是黑白的。代码可以是功能性的,也可以是命令性的,也可以是纯功能性的,但这一切都取决于您所要求的代码

  • 我会做(不一定更好):

  • 您的函数方式可读性较差(IMO),它会创建两个不必要的中间数组(引擎可能会对其进行优化,但……很可能会)

  • “功能性/命令性编程”不是黑白的。代码可以是功能性的,也可以是命令性的,也可以是纯功能性的,但这一切都取决于您所要求的代码


  • 您已经有了一个很好的开始,即确定此行为应该在其自身的功能中隔离。但“功能”并不局限于像
    map
    reduce
    filter
    这样的常用方法

    考虑下面的
    buildArray
    -

    const identity=x=>
    x
    const buildArray=(大小=0,f=identity)=>
    大小===0
    ? []
    :[…buildArray(大小-1,f),f(大小-1)]
    console.log(buildArray(5))
    // [ 0, 1, 2, 3, 4 ]
    log(buildArray(5,x=>x*x))
    // [ 0, 1, 2, 3, 16 ]
    log(buildArray(3,()=>({a:1})))
    //[{a:1},{a:1},{a:1}]
    console.log(buildArray())
    
    //[]
    您已经有了一个很好的开始,即确定此行为应该在其自身的函数中隔离。但“功能”并不局限于像
    map
    reduce
    filter
    这样的常用方法

    考虑下面的
    buildArray
    -

    const identity=x=>
    x
    const buildArray=(大小=0,f=identity)=>
    大小===0
    ? []
    :[…buildArray(大小-1,f),f(大小-1)]
    console.log(buildArray(5))
    // [ 0, 1, 2, 3, 4 ]
    log(buildArray(5,x=>x*x))
    // [ 0, 1, 2, 3, 16 ]
    log(buildArray(3,()=>({a:1})))
    //[{a:1},{a:1},{a:1}]
    console.log(buildArray())
    
    //[]
    返回数组(大小)。填充({bar:“baz”})您的代码不起作用,因为您将thunk传递给
    映射
    ,即没有参数的函数。在FP中,与严格评估的语言结合使用,显式thunks仅用于获得懒散。同样在Javascript中,由于缺乏类型系统和这样的系统所需要的保证,您可以在本地应用突变,以便它们在父范围中不可见。
    returnarray(size).fill({bar:“baz”})您的代码不起作用,因为您将thunk传递给
    映射
    ,即没有参数的函数。在FP中,与严格评估的语言结合使用,显式thunks仅用于获得懒散。同样在Javascript中,由于缺乏类型系统和这样一个系统所需要的保证,您可以在本地应用突变,这样在父范围中就看不到它们了。感谢您的回复,我不知道为什么所有事情都被否决了。至于可读性,这是我关心的问题之一,但我想我喜欢你所说的。这可能是我得到的最好的答复。谢谢again@jeffbeltran它可能被认为是固执己见/过于宽泛,可能被认为是离题的。因此,毕竟是民主的,两个人认为答案不合适,三个人认为答案合适(或者是你的投票结果),多数人获胜:)
    Array。从(Array(size),…)
    中,那些不熟悉JS奇怪的“Array-like”行为的人会更清楚。谢谢你的回答,但我不知道为什么所有的事情都被否决了。至于可读性,这是我关心的问题之一,但我想我喜欢你所说的。这可能是我得到的最好的答复。谢谢again@jeffbeltran它可能被认为是固执己见/过于宽泛,可能被认为是离题的。因此,毕竟是民主的,两个人认为答案不合适,三个人认为答案合适(或者是你的投票结果),大多数人获胜:)
    Array。从(Array(size),…)
    会让那些不熟悉JS奇怪的“Array-like”行为的人更清楚。这太棒了,谢谢。虽然我的例子很做作,但最后一点是我真正想做的。这太棒了,谢谢。虽然我的例子很做作,但最后一点是我真正想做的。
      return Array.from({ length: size }, () => ({ bar: "baz" }));