记录前端面试题

问题:给定[10,20,30,40,50] 求累加目标和为90的对应的下标

// map方式
const twoSum = (nums, target) => {
  // 1. 构造哈希表
  const map = new Map(); // 存储方式 {need, index}

  // 2. 遍历数组
  for (let i = 0; i < nums.length; i++) {
    // 2.1 如果找到 target - nums[i] 的值
    if (map.has(nums[i])) {
      return [map.get(nums[i]), i];
    } else {
      // 2.2 如果没找到则进行设置
      map.set(target - nums[i], i);
    }
  }
};

console.log(twoSum([3,2,5,7], 9)); // [0, 1]



 // 双重for   
function towSum(nums, target) {
    let len = nums.length;
    for (let i = 0; i < len; i++) {
        for (let j = i + 1; j < len; j++)
            if (nums[i] + nums[j] == target) return [i, j];
          }
     }
}

console.log(towSum([3, 2, 6, 4], 6));
// [1, 3]

问题:判断2个对象相等

   
    // let obj1 = { name: 'amy', eat: { body: 1, say: 'kk' }, time: [1, 2, 3, 4, 5] }
    // let obj2 = { name: 'amy', eat: { body: 1, say: 'kk' }, time: [1, 2, 3, 4, 5] }
 
    let obj1 = { name: NaN, eat: { body: 1, say: 'kk' }, time: [1, 2, 3, 4, 5] }
    let obj2 = { name: NaN, eat: { body: 1, say: 'kk' }, time: [1, 2, 3, 4, 5] }
 
    const isObjectEqual = (obj1, obj2) => {
       if (obj1 === obj2) return true
       if (obj1 instanceof Date && obj2 instanceof Date) return obj1.getTime() === obj2.getTime()
    if (!obj1 || !obj2 || (typeof obj1 !== 'object' && typeof obj2 !== 'object')) return obj1 === obj2
    if (obj1.prototype !== obj2.prototype||Object.keys(obj1).length !== Object.keys(obj2).length) return false
    return Object.keys(obj1).every(k => isObjectEqual(obj1[k], obj2[k]))
    }
    console.log(isObjectEqual(obj1, obj2));

问题:前端菜单数据结构题

const list = [
    { label: '1', id: 1, parentId: 0 },
    { label: '2', id: 2, parentId: 0 },
    { label: '3', id: 3, parentId: 0 },
    { label: '1-1', id: 4, parentId: 1 },
    { label: '2-1', id: 5, parentId: 2 },
    { label: '3-1', id: 6, parentId: 3 },
    { label: '1-1-1', id: 7, parentId: 4 },
  ]

  function findParents(arr) {
    let cloneData = JSON.parse(JSON.stringify(arr))  // 对源数据深度克隆
    return cloneData.filter(father => {
      let branchArr = cloneData.filter(child => father.id == child.parentId)  //返回每一项的子级数组
      branchArr.length > 0 ? father.children = branchArr : ''  //如果存在子级,则给父级添加一个children属性,并赋值
      return father.parentId == 0;   //返回第一层
    });
  }

  console.log(findParents(list))
  // [
  //   {
  //     label: '1',
  //     id: 1,
  //     parentId: 0,
  //     children: [
  //       {
  //         label: '1-1',
  //         id: 4,
  //         parentId: 1,
  //         children: [
  //           {
  //             label: '1-1-1',
  //             id: 7,
  //             parentId: 4,
  //           },
  //         ],
  //       },
  //     ],
  //   },
  //   {
  //     label: '2',
  //     id: 2,
  //     parentId: 0,
  //     children: [
  //       {
  //         label: '2-1',
  //         id: 5,
  //         parentId: 2,
  //       },
  //     ],
  //   },
  //   {
  //     label: '3',
  //     id: 3,
  //     parentId: 0,
  //     children: [
  //       {
  //         label: '3-1',
  //         id: 6,
  //         parentId: 3,
  //       },
  //     ],
  //   },
  // ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海瑞吖~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值