问题:给定[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,
// },
// ],
// },
// ]