摘要:判断电话号码算法 function telephoneCheck(str) { var re=/^[1-9]\d{9}$|^[1-9]\d{2}-[0-9]\d{2}-[0-9]\d{3}$|^[1−9]\d2[1−9]\d2[0-9]\d{2}-[0-9]\d{3}$|^\([1-9]\
判断电话号码算法
function telephoneCheck(str) { var re=/^[1-9]\d{9}$|^[1-9]\d{2}-[0-9]\d{2}-[0-9]\d{3}$|^\([1-9]\d{2}\)[0-9]\d{2}-[0-9]\d{3}$|^\([1-9]\d{2}\)\s[0-9]\d{2}-[0-9]\d{3}$|^[1-9]\d{2}\s[0-9]\d{2}\s[0-9]\d{3}$|^[1]\s[0-9]\d{2}\s[0-9]\d{2}\s[0-9]\d{3}$|^[1]\s[0-9]\d{2}-[0-9]\d{2}-[0-9]\d{3}$|^[1]\s\([0-9]\d{2}\)\s[0-9]\d{2}-[0-9]\d{3}$|^[1]\([0-9]\d{2}\)[0-9]\d{2}-[0-9]\d{3}$/g;
if(str.match(re)){
return true;
}else{
return false;
}
}
telephoneCheck("555-555-5555");
如果传入字符串是一个有效的美国电话号码,则返回 true。用户可以在表单中填入一个任意有效美国电话号码。下面是一些有效号码的例子(还有下面测试时用到的一些变体写法):
555-555-5555(555)555-5555(555)555-55555555555555555555555515555555555
本节的任务就是验证前面给出的字符串是否是有效的美国电话号码. 区号是必须有的. 如果字符串中给出了国家代码, 你必须验证其是 1.如果号码有效就返回 true ; 否则返回 false.
集合交集算法
functionsym(args){vartemp,pos;vara=Array.from(arguments);//Array.from() 方法从一个类似数组或可迭代的对象中创建一个新的数组实例a=a.reduce(function(prev, curv, index, array){//arr.reduce参数:callback:执行数组中每个值的函数,包含四个参数:accumulator:上一次调用回调返回的值,或者是提供的初始值(initialValue)。currentValue:数组中正在处理的元素。currentIndex:数据中正在处理的元素索引,如果提供了 initialValue ,从0开始;否则从1开始。array:调用 reduce 的数组,initialValue:可选项,其值用于第一次调用 callback 的第一个参数。如果没有设置初始值,则将数组中的第一个元素作为初始值。空数组调用reduce时没有设置初始值将会报错vara = prev.filter(function(item){returncurv.indexOf(item) <0; });varb = curv.filter(function(item){returnprev.indexOf(item) <0; });returna.concat(b); });returna.filter(function(item,index,array){returnarray.indexOf(item) == index; }); }sym([1,2,3], [5,2,1,4]);
创建一个函数,接受两个或多个数组,返回所给数组的对等差分(symmetric difference) (△ or ⊕)数组.
给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}), 而数学术语 "对等差分" 的集合就是指由所有只在两个集合其中之一的元素组成的集合(A △ B = C = {1, 4}). 对于传入的额外集合 (如 D = {2, 3}), 你应该安装前面原则求前两个集合的结果与新集合的对等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).
收银系统算法
functioncheckCashRegister(price, cash, cid){varchange;varbase=100;//金额基数change=(cash-price)*base;//找零vargetTotalMoney=function(arr){//定义一个函数,用来求零钱和vars=arr.reduce(function(preV, currV, currIndex, array){returnpreV+currV[1]; },0);returnbase*s; };varremain = getTotalMoney(cid);if(remain < change){//余额不足,没钱找了return"Insufficient Funds"; }varbaseDollarObj={"PENNY":1,"NICKEL":5,"DIME":10,"QUARTER":25,"ONE":100,"FIVE":500,"TEN":1000,"TWENTY":2000,"ONE HUNDRED":10000};varchangeArr=[];varcurrLast=0;// 当前面值所剩余额varcurrMoney=0;//当前金钱面额varcurrtotal=0;//当前零钱可找总额for(vari=cid.length-1;i>=0;i--){ currLast=cid[i][1]*base;//当前面值剩余金额if(currLast<=0) {continue;//当前面值的金额剩余0,跳过} currMoney=baseDollarObj[cid[i][0]];if(change>currMoney){//如果当前金额面值小于应找钱数if(change0){return"Insufficient Funds";//找不开的面值}elseif(change===0&&((cash-price)*base==remain)){return"Closed";//如果零钱数等于应找数额并且可找出来}else{returnchangeArr; }}checkCashRegister(19.50,20.00, [["PENNY",1.01], ["NICKEL",2.05], ["DIME",3.10], ["QUARTER",4.25], ["ONE",90.00], ["FIVE",55.00], ["TEN",20.00], ["TWENTY",60.00], ["ONE HUNDRED",100.00]]);
设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数。cid 是一个二维数组,存着当前可用的找零。当收银机中的钱不够找零时返回字符串 "Insufficient Funds". 如果正好则返回字符串 "Closed"。否者, 返回应找回的零钱列表,且由大到小存在二维数组中
库存更新算法
functionupdateInventory(arr1, arr2) { arr2=arr2.filter(function(v){varres =true;for(vari =0;i < arr1.length;i++){if(v[1] === arr1[i][1]){ arr1[i][0] = arr1[i][0] + v[0]; res=false;break; } }returnres; }); arr1 = arr1.concat(arr2); arr1.sort(function(a,b){returna[1].charCodeAt(0) - b[1].charCodeAt(0); });returnarr1; }varcurInv = [ [21,"Bowling Ball"], [2,"Dirty Sock"], [1,"Hair Pin"], [5,"Microphone"]];varnewInv= [ [2,"Hair Pin"], [3,"Half-Eaten Apple"], [67,"Bowling Ball"], [7,"Toothpaste"]];updateInventory(curInv,newInv);
依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物名称的字母顺序排列
排列组合去重算法
functionpermAlone(str){varreg =/(.)1+/g;//创建正则,如果字符串全重复,则直接return 0if(str.match(reg) !==null&& str.match(reg)[0] === str) {return0; }functionrecoper(str){vararr = [];//存放str的全排列if(str.length >1) {varleft = str[0];varrest = str.slice(1, str.length);varperRes = recoper(rest);//获取rest字符串的全排列varpl = perRes.length, pil, s;for(vari =0; i < pl; i++) { s = perRes[i]; pil = perRes[i].length;for(varj =0; j <=pil; j++) {vartmp = s.substring(0, j) + left + s.substring(j, pl); arr.push(tmp); } } }elseif(str.length ==1) { arr = [str]; }returnarr; } perarr=recoper(str);returnperarr.filter(function(val){//返回相邻不重复的数量return!val.match(reg); }).length;}permAlone('aab');
把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准
例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有两个 (aba and aba)没有连续重复的字符 (在本例中是 a)
原文链接