一天一个仿lodash函数实现-zip
前面说unzip其实就是数组转置,那其实zip也就是逆向,那还是转置了
导致zipObjectDeep费了点脑细胞,写了个勉强过了官方文档示例的实现。
function zip(...arr){
const result = [];
arr.forEach((item, index)=>{
if(index===0){
item.forEach(it=>result.push([it]))
}else{
item.forEach((it, si)=>result[si].push(it))
}
})
return result;
}
function zipObject(props, values){
const result = {};
props.forEach((prop, index)=>{
result[prop] = values[index]
})
return result
}
// 随便实现
function zipObjectDeep(props, values){
const result = {};
props.forEach((prop, index)=>{
const paths = prop.split('.');
const len = paths.length;
paths.reduce((pre, cur, pindex)=>{
const match = cur.match(/(\w+)\[(\d+)\]/);
if(match){
if(!pre[match[1]]){
pre[match[1]] = [];
}
if(pindex===len-1){
pre[match[1]][match[2]] = values[index];
} else {
return pre[match[1]][match[2]] = {};
}
}else {
if(pindex===len-1){
pre[cur] = values[index];
}else{
if(!pre[cur]){
pre[cur] = {};
}
}
}
return pre[cur]
}, result);
})
return result
}
function zipWith(...args){
const arr = args.slice(0, args.length-1);
const fn = args[args.length-1];
const result = [];
arr.forEach((item, index)=>{
if(index===0){
item.forEach(it=>result.push([it]))
}else{
item.forEach((it, si)=>result[si].push(it))
}
})
return result.map(item=>fn.apply(null, item))
}
分类:
一天一个函数实现
标签:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律