在开发android 的开发习惯,转向js 开发的时候,回遇到些代码习惯的问题,今天就遇到了一个问题
需求场景 是当我门找到满足条件的信息 我门返回 true 没找到 返回 fasle ,对于一个写android 的人来说 通常会这么写:
showGroupCommentList(responseBody) {
responseBody.GroupList.map((data) => {
if (data.GroupType === 1 && data.CommentDetailList.length > 0) {
return true;
}
});
return false;
}
但是在debug 过程中 发现 这个方法返回的值undefined
从java 的角度 我百思不得其解,不就是返回 对 boolean 值吗,为什么会出现问题,先说解决办法,代码应该这么写:
showGroupCommentList(responseBody) {
let hasGroupComment = false;
responseBody.GroupList.map((data) => {
if (data.GroupType === 1 && data.CommentDetailList.length > 0) {
hasGroupComment = true;
}
});
return hasGroupComment;
}
设置变量,在处理中赋值,为了弄明白这个问题,查了下js 语法,
responseBody.GroupList.map((data) => {
}
这里的map 的方法体中,其实是回调,所以我一开始在回调中返回true or false 写法是有问题的,.
•map:和forEach非常相似,都是用来遍历数组中的每一项值的,用来遍历数组中的每一项;
•区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);
2 在写js 的程序的时候,会犯些低级错误,
比如一下代码
getTheSameKindPeople(list) {
if (!list) {
return;
}
for (let i = 0; i < list.length; i++) {
if (list[i].ItemType === 1) {
this.displayCommentOrderType = list[i].ItemValue;
}
if (list[i].ItemType === 3) {
this.sameKindPeopleTitle = list[i].ItemValue;
}
if (list[i].ItemType === 4) {
this.sameKindPeopleUrl = list[i].ItemValue;
}
}
这段代码是典型的java 思想 写的代码,那么如果想当然的去写 会写成
if(list.get(i).ItemType === 1){
this.displayCommentOrderType = list.get[i].ItemValue;
}
这样写会使程序获取的值undinefed ,避免犯这些低级错误
4 在我门开发js 的过程中 我门会像java 中的for 循环中,当满足条件 直接 break 出来,其实这种写法看似简单 但是对于初接触 js 的人来说容易犯错
上面体到 不能用 forEach 或者 forMap
for (const data of htlBaseInfo.RoomList) {
if (data.RoomId === roomId || data.RoomName === roomName) {
status = 1;
break;
}
}
for of 的形式 或者 比较常规 简单的写法
for (const data of htlBaseInfo.RoomList) {
if (data.RoomId === roomId || data.RoomName === roomName) {
status = 1;
break;
}
}