新手看不懂下面的代码,求解释,谢谢!

function likes (names) {  
    var templates = [   
         'no one likes this',    
         '{name} likes this',   
         '{name} and {name} like this',   
         '{name}, {name} and {name} like this',    
         '{name}, {name} and {n} others like this'
    ];  
    var idx = Math.min(names.length, 4);  
    return templates[idx].replace(/{name}|{n}/g, function (val) {    
        return val === '{name}' ? names.shift() : names.length;
  });
}
-----------------------------------------------------------------------------
备注:names是一个存储姓名的数组,如["范冰冰","邓超","王宝强","李健"]

主要是最后一句看不懂。
return val === '{name}' ? names.shift() : names.length;
“===”不是只能return ture或false吗?那怎么实现字符串的替换?
求帮忙写下注释,谢谢!
慕粉4031128
浏览 1548回答 3
3回答

西兰花伟大炮

因为这里只匹配{name}跟{n},如果是{name},还是会返回true,然后就会移除数组第一个元素,并且返回这个元素,这个元素就替换到templates里面的{name},而当匹配到{n}时,则是false,就会返回当前数组的长度,也就替换到{n}的位置,因为匹配name的都被移除了,length也就是剩下元素的长度。欢迎明天采纳

慕的地8582982

KNOKADZIGCTSVKUWSVSZISMTJFORUKPMIFUWFDAQUISIVYGJMIEZHYUSCLZPSIKJMPQLNQTXVRYDGAPTCNXIXDNXXGVDTVTDWSPAYHYAQHKZJGOZVEHZWMOYUBLBRNKUFTXUSQSVYHKTWZVCFBKHXGDGQFQGVRCENEUKOYVKBPYWFBSBFBSIFWSVQMPDNDTQXADMJABEUYBROEGJZXTPZPAOADNYQFIFCLOYNOLMVMISACYUDOFOKLURURTRNIKAXZCGQKOEYBDAWNDMVFOBLAGDGPSHRHOLZDGWFIKBYZPEHEVZCEOXBDGQZJTUDMDAXFBSWGWYVLRUDTDAFOQGQVSBLCNDMIQHZJMWZWEUEHEJKAJAWMVRUKWZIYILNBROESGVYIFOQTQYUKUXZWSHXIYEHXAWUEVRUXRBDSOENDGPGACLUKGKGJTKCLCFBENJSDAQNPLOLCTBEOIGCFIKHQZILKBIYBXNCLCYKMJLVLHRGWMKZPZCZIRMWSHQTJSCMJEHEIRVLOTVLHKZSJFVKNXGPFIBXMHQMBDFJFLHKNCYHWFBRIFNQFIXUPMJEGCXNWENJTCAJEHXUEBQADVYNQSVYGORNDZOYIEMCSHECLVKNJFCESIIYNYOEAJFVLGWMBEIEBDADEAWYOXGORNISOJSVENDFCFPYULHWMIRARAPLBQGVEGCSSUQHQYAJZJZSORNJSOXZWLZVRTJGJRNCLCYVWFPLHJTQADSBQBJFBXNADZWGODMVXTRACYBRAQSOLCYHXZIZPRHYHJFGQODGVZVLODSPYNKZPNIYUQYZJWSCFORGODTQSOKNLHWMIEGDZWRDHWSULORZXGACZPFBXTAQACSSOKNKGIEBOKMQZOEGCYB

洋葱_dot

return val === '{name}' ? names.shift() : names.length;这个的名字我忘了,好像叫三联表达式吧!意思是:'{name}'是条件,如果成立就是true返回names.shift(),如果是false就返回names.length另外多说一句:===是全等于,不仅要数值相等,type类型也要相等
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript