Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的模式设计和映射功能。什么是';不行?_Javascript_Arrays_Map Function - Fatal编程技术网

Javascript中的模式设计和映射功能。什么是';不行?

Javascript中的模式设计和映射功能。什么是';不行?,javascript,arrays,map-function,Javascript,Arrays,Map Function,第一个代码和第二个代码有什么区别?第一个有效,但第二个无效,这将返回一个数字为4的数组,而不是角点为4的数组对象。问题出在map函数中 第一代码 const Strategy = { map : function(array){ const newArray = array.map((e) => { e.setCorners(4); return e }); return new

第一个代码和第二个代码有什么区别?第一个有效,但第二个无效,这将返回一个数字为4的数组,而不是角点为4的数组对象。问题出在map函数中

第一代码

   const Strategy = {
            map : function(array){
                    const newArray = array.map((e) => { e.setCorners(4);  return e });
                    return newArray
                },
        }


    const objectCorners = function(corners){
    
        _corners = corners
    
    
    
        return ({
            corners : _corners
            getCorners : (() => { return corners}),
            setCorners : ((corners) => {_corners = corners}),
        })
    }
const array = [new objectCorners(3),new objectCorners(6),new objectCorners(7)]
const result = Strategy["map"](array)
console.log(result) // [{corners : 4},{corners : 4},{corners : 4}]
第二代码

 const Strategy = {
            map : function(array){
                    const newArray = array.map((e) => {return e.setCorners(4); });
                    return newArray
                },
        }


    const objectCorners = function(corners){
    
        _corners = corners
    
    
    
        return ({
            corners : _corners
            getCorners : (() => { return corners}),
            setCorners : ((corners) => {_corners = corners}),
        })
    }
const array = [new objectCorners(3),new objectCorners(6),new objectCorners(7)]
const result = Strategy["map"](array)
console.log(result) // [4,4,4]
第一个密码和第二个密码有什么区别。。。问题出在map函数中

好吧,区别在于映射函数;-)

特别是返回值

(e)=>{e.setCorners(4);return e}
的情况下,显式返回
e

然而,在
(e)=>{return e.setCorners(4);}
的情况下,返回
e.setCorners(4)
的返回值。根据它的定义

setCorners:((corners)=>{{u corners=corners})
相当于

设置角点:函数(角点){
_角=角
//无返回值,即此函数返回未定义的
}
因此返回
未定义的

OP注意事项:

  • 请先试用您的代码,因为它有语法错误
  • 请输入实际输出。
    • 在第一个代码中,您有值为3,6,7的
      objectCorner
      ,但在注释中有值4
    • 在第二个代码中,您的注释输出是
      [4,4,4]
      ,而实际上它是
      [undefined,undefined,undefined]

  • 构建模块是一种流行的函数式编程技术。我们不使用getter和setter来改变状态,而是简单地构造一个新对象-

    //Shape.js
    常数为空=
    {角点:0}
    const create=(角点=0)=>
    ({corners})
    const setCorners=(t=空,corners=0)=>
    ({…t,角点})
    导出{empty,create,setCorners}
    
    让我们在示例程序中使用
    Shape
    模块-

    //Main.js
    从“/Shape”导入{create,setCorners}
    常量策略=
    {map:shapes=>shapes.map(s=>setCorners(s,4))
    }
    康斯塔尔=
    [创建(3)、创建(6)、创建(7)]
    常数结果=
    战略地图(arr)
    console.log(结果,arr)
    //[{角点:4},{角点:4},{角点:4}]
    //[{角点:3},{角点:6},{角点:7}]
    
    注意,未修改输入数组
    arr
    ,以构造
    结果。展开下面的代码段,在您自己的浏览器中验证结果

    //Shape.js
    常数为空=
    {角点:0}
    常量创建=
    (角点=0)=>
    ({corners})
    常数设置角=
    (t=空,角点=0)=>
    ({…t,角点})
    // ---
    //Main.js
    常量策略=
    {map:arr=>arr.map(v=>setCorners(v,4))
    }
    康斯塔尔=
    [创建(3)、创建(6)、创建(7)]
    常数结果=
    战略地图(arr)
    console.log(结果,arr)
    //[{角点:4},{角点:4},{角点:4}]
    
    //[{corners:3},{corners:6},{corners:7}]
    实际上,这两个似乎都不起作用,因为
    \u corners
    变量意外地是全局变量。我无法复制。在执行第二个代码段时(修复语法错误后),我得到了预期的
    [undefined,undefined,undefined]
    ,而不是
    [4,4,4]
    。这与函数式编程有什么关系?虽然这是比OP好得多的代码,但我认为这并不能回答他们的问题。
    (corners)=>{u corners=corners}
    不返回任何内容吗@Bergi是的,当然,它不会返回任何内容,谢谢您的更正。我被OP误导了。我会更新我的答案