这是一道题目,要求验证数组中的数字,不小于55且大于7是对的,反之错的。
我写的代码是这个样子的。
function correct(data){
var checkResult = [];
var check = function(){
(this[0]>=55&&this[1]>7)?checkResult.push("Right"):checkResult.push("Wrong");
};
data.map(check);
return checkResult;
}
用[[45, 12],[55,21],[19, -2],[104, 20]]作测试,返回的都是wrong。
应该是我的this指向不对。
this获取不到我想要的值,请问关于this应该怎样理解和使用?
请问我改怎么修改?和怎么理解我的错误?
谢谢大家。辛苦了。
首先有个疑问
题目中的『要求验证数组中的数字,不小于55且大于7是对的,反之错的』是不是写错了?不小于 55 的数字是一定大于 7 的。
根据你的测试用例,我想题目的意思应该是『数组的每一位都是一个 2 位数组,对于这些每一个数组,验证其第一个数字不小于 55 且第二个数字大于 7』。
this
是『调用方法的主体』比如:
本题与
this
无关,在本题中不应使用this
解答此题你应该了解如下两个知识:
.map()
方法的用法简单讲下:
.map()
方法接受一个函数作为参数,比如你的check()
,对于数组中的每一个值,都会调用check()
。你需要纠正的是,在check()
里如何拿到数组中当前的值?事实上,
.map()
在调用check()
时,会把当前的值作为参数传递进去,也就是check(currentValue)
。所以要在check()
中获取当前的值,只需取第一个参数即可:这样修改你的解答就正确了。
如何变得更好
事实上,
.map()
的返回值也是一个数组。如果你的check()
有返回值,那么data.map(check)
的返回值是每一次check()
返回值构成的数组。也就是说,
correct()
可简化为:资源
JavaScript 相关的知识,建议你查阅一份相当权威的文档:MDN,比如有关
.map()
的介绍在这里就有。或者你可以 Google 搜索如『array.map mdn』这样的关键字,通常第一个结果就是 MDN 文档。
希望对你有帮助,望采纳。