为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript里this的问题

Javascript里this的问题

湖上湖 2019-03-07 14:15:42
这是一道题目,要求验证数组中的数字,不小于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应该怎样理解和使用?请问我改怎么修改?和怎么理解我的错误?谢谢大家。辛苦了。
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

首先有个疑问

题目中的『要求验证数组中的数字,不小于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 文档。

希望对你有帮助,望采纳。


查看完整回答
反对 回复 2019-03-21
?
临摹微笑

TA贡献1982条经验 获得超2个赞

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的用法


查看完整回答
反对 回复 2019-03-21
  • 2 回答
  • 0 关注
  • 434 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信