分享一道某大厂的算法笔试题
一道生成sku的算法题, 限时30分钟,有空的话可以试试看,就当摸鱼的时候练练手
// 已知数据:
const goods= '鞋子';
const specList = [
['运动鞋', '休闲鞋'],
['36码', '45码'],
['红色', '蓝色'],
['高帮', '低帮'],
]
/**
要求输出结果:
鞋子-运动鞋-36码-红色-高帮
鞋子-运动鞋-36码-红色-低帮
鞋子-运动鞋-36码-蓝色-高帮
鞋子-运动鞋-36码-蓝色-低帮
鞋子-运动鞋-45码-红色-高帮
鞋子-运动鞋-45码-红色-低帮
鞋子-运动鞋-45码-蓝色-高帮
鞋子-运动鞋-45码-蓝色-低帮
鞋子-休闲鞋-36码-红色-高帮
鞋子-休闲鞋-36码-红色-低帮
鞋子-休闲鞋-36码-蓝色-高帮
鞋子-休闲鞋-36码-蓝色-低帮
鞋子-休闲鞋-45码-红色-高帮
鞋子-休闲鞋-45码-红色-低帮
鞋子-休闲鞋-45码-蓝色-高帮
鞋子-休闲鞋-45码-蓝色-低帮
*/
限时30分钟,敲码吧骚年
。。。
。。。
。。。
。。。
。。。
下面是我个人当时看到这个题的思路和实现逻辑:
// 判断是否是非空数组
function onCheckArray(list) {
if (list && Object.prototype.toString.call(list) === '[object Array]' && list.length > 0) {
return true
}
return false
}
// 获取规格
function onGetSku(list, specStr) {
// 判断list是否是非空数组
if (onCheckArray(list)) {
const listLength = list.length
const currentItem = list[0] // 当前项
const nextItem = list[1] // 下一项
// 判断下一项是否还是数组,是的话截取数组当前项后面的继续递归
if (onCheckArray(nextItem)) {
currentItem.forEach((item) => {
onGetSku(list.slice(1, listLength), `${specStr}-${item}`)
})
} else {
// 没有下一项的话,就拿当前项进行输出
currentItem.forEach((item) => {
console.log(`${specStr}-${item}`)
})
}
} else {
return specStr
}
}
onGetSku(specList, goods)
主要思路,是判断数组下一项是否还是数组,是的话截取数组当前项后面的所有项继续递归
欢迎各位大佬提供新思路,互相借鉴学习