Skip to content
On This Page

手写题[JavaScript][场景类]

1. 密码校验,要求包含大小写字母,数字,长度为6,至少满足三个条件

可以通过正则表达式来实现。以下是一个简单的 JavaScript 函数示例,用于检查密码是否符合要求:

javascript
function validatePassword(password) {
  const conditions = [
    /[a-z]/, // 包含小写字母
    /[A-Z]/, // 包含大写字母
    /\d/,    // 包含数字
    /.{6,}/  // 长度至少为6
  ];

  const satisfiedConditions = conditions.reduce((count, condition) => {
    return count + (condition.test(password) ? 1 : 0);
  }, 0);

  return satisfiedConditions >= 3;
}

2. 数组排序,请根据 name 或者 age 进行排序

假设 array 是包含对象的数组 [{name: 'xxx', age: 12, ...}, ...],请根据 name 或者 age 进行排序,如果 name 中有中文是如何排序的。

javascript
// 按照 age 进行排序
array.sort((a, b) => a.age - b.age);

// 按照 name 进行排序
// localeCompare 方法会根据中文拼音对姓名进行排序
// sensitivity: 'accent' 是 localeCompare 方法的一个选项,用于指定字符串比较时是否考虑重音符号的差异
array.sort((a, b) => a.name.localeCompare(b.name, 'zh-Hans-CN', { sensitivity: 'accent' }));

3. 判断 b 是否是 a 的子集

a 和 b 有重复元素,要求 b 的同个元素出现次数 <=a 的同个元素出现次数。

javascript
function isSubset(a, b) {
  // 构建哈希表记录数组 a 中各元素出现次数
  const countA = new Map();
  for (let num of a) {
    countA.set(num, (countA.get(num) || 0) + 1);
  }
  
  // 检查数组 b 中的元素是否满足条件
  for (let num of b) {
    if (!countA.has(num) || countA.get(num) === 0) {
      return false;
    }
    countA.set(num, countA.get(num) - 1);
  }
  
  return true;
}

// 示例
console.log(isSubset([1, 2, 2, 3, 4], [2, 2, 4]));  // true
console.log(isSubset([1, 2, 2, 3, 4], [2, 2, 5]));  // false