Javascript中的模式设计和映射功能。什么是';不行?
第一个代码和第二个代码有什么区别?第一个有效,但第二个无效,这将返回一个数字为4的数组,而不是角点为4的数组对象。问题出在map函数中 第一代码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
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误导了。我会更新我的答案