Javascript里this的问题

这是一道题目,要求验证数组中的数字,不小于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应该怎样理解和使用?

请问我改怎么修改?和怎么理解我的错误?

谢谢大家。辛苦了。


湖上湖
浏览 435回答 2
2回答

烙印99

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

临摹微笑

function correct(data){        var checkResult = [];        var check = function(item){            (item[0]>=55&&item[1]>7)?checkResult.push("Right"):checkResult.push("Wrong");        };        data.map(check);        return checkResult;    }    console.log(correct([[45, 12],[55,21],[19, -2],[104, 20]]))自己先查下map的用法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript