1.Validate US Telephone Numbers
如果传入字符串是一个有效的美国电话号码,则返回 true.
function telephoneCheck(str) {
return /^1? ?(\d{3}|\(\d{3}\))[ -]?\d{3}[ -]?\d{4}$/.test(str);
}
telephoneCheck("555-555-5555");
2.Symmetric Difference
创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组.
function sym(args) {
let argsArr = Array.from(arguments);
let result = argsArr.reduce((arr1, arr2) => {
var arr1 = dis(arr1);
var arr2 = dis(arr2);
return symDif(arr1, arr2);
}, [])
return result.sort((a, b) => {
return a - b;
});
}
//去除每个数组中重复的数字
dis = (arr) => {
return arr.filter((item, index, array) => {
return array.indexOf(item) == index;
})
}
//两个数组对等差分
symDif = (arr1, arr2) => {
var newArr = arr1.filter((item) => {
var index = arr2.indexOf(item);
if (index < 0) {
return true;
} else {
arr2.splice(index, 1);
return false;
}
});
return newArr.concat(arr2);
}
sym([1, 2, 3], [5, 2, 1, 4]);
3.Exact Change
设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数.
cid 是一个二维数组,存着当前可用的找零.
当收银机中的钱不够找零时返回字符串 "Insufficient Funds". 如果正好则返回字符串 "Closed".
否则, 返回应找回的零钱列表,且由大到小存在二维数组中.
4.Inventory Update
依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物名称的字母顺序排列.
自己验证的时候没问题
function updateInventory(arr1, arr2) {
// 请保证你的代码考虑到所有情况
const newArr = curInv.map((item) => item[1]);
newInv.forEach((item, index, arr) => {
var i = newArr.indexOf(item[1]);
if (i >= 0) {
curInv[i][0] += newInv[index][0];
} else {
curInv.push(newInv[index]);
}
})
return curInv.sort((a, b) => {
return a[1].charCodeAt(0) - b[1].charCodeAt(0);
});
}
// 仓库库存示例
var curInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"]
];
var newInv = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];
updateInventory(curInv, newInv);
5.No repeats please
把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准
例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有两个 (aba and aba)没有连续重复的字符 (在本例中是 a).