js高级脚本算法

摘要:判断电话号码算法 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)


js高级脚本算法_第1张图片

原文链接

你可能感兴趣的:(js高级脚本算法)