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吗?那怎么实现字符串的替换?
求帮忙写下注释,谢谢!
3 回答
已采纳
西兰花伟大炮
TA贡献376条经验 获得超318个赞
因为这里只匹配{name}跟{n},如果是{name},还是会返回true,然后就会移除数组第一个元素,并且返回这个元素,这个元素就替换到templates里面的{name},而当匹配到{n}时,则是false,就会返回当前数组的长度,也就替换到{n}的位置,因为匹配name的都被移除了,length也就是剩下元素的长度。欢迎明天采纳
洋葱_dot
TA贡献2条经验 获得超0个赞
return val === '{name}' ? names.shift() : names.length;这个的名字我忘了,好像叫三联表达式吧!
意思是:'{name}'是条件,如果成立就是true返回names.shift(),如果是false就返回names.length
另外多说一句:===是全等于,不仅要数值相等,type类型也要相等
添加回答
举报
0/150
提交
取消