如何按指定索引映射数组,实现文件名与对应文件路径配对重排?
实现方案
默认你提到的files数组满足规则:前半段为按顺序排列的文件名,后半段为与前半段文件名一一对应的同顺序路径,数组总长度为偶数。
语法说明:你示例中写的
remapfiles = {[filenameA,filepathA]...}存在语法错误,JS中对象不能直接包裹无键值的数组元素,下文默认你需要的是元素为[文件名, 路径]对的数组,即remapfiles = [[filenameA,filepathA], [filenameB,filepathB]...],如果需要对象格式可参考备选方案。
核心映射逻辑实现
// 示例输入 var files = ["filenameA", "filenameB", "filenameC", "filepathA", "filepathB", "filepathC"]; function remapFiles(filesArr) { // 校验数组长度合法性 if (filesArr.length % 2 !== 0) { throw new Error("数组长度不是偶数,无法完成文件名和路径的一一映射"); } // 计算文件名总数量,即前后半段的分界点 const nameCount = filesArr.length / 2; // 遍历前半段文件名,匹配后半段对应位置的路径 return filesArr.slice(0, nameCount).map((filename, index) => { return [filename, filesArr[nameCount + index]]; }); } // 调用方法得到映射结果 var remapfiles = remapFiles(files); // 打印输出结果 console.log(remapfiles);
备选:映射为文件名-路径对象
如果你需要用文件名作为键、路径作为值的对象存储,可改用如下实现:
function remapFilesToObj(filesArr) { if (filesArr.length % 2 !== 0) { throw new Error("数组长度不是偶数,无法完成一一映射"); } const nameCount = filesArr.length / 2; const result = {}; filesArr.slice(0, nameCount).forEach((filename, index) => { result[filename] = filesArr[nameCount + index]; }); return result; }
内容的提问来源于stack exchange,提问作者MavDev
相关产品推荐
相关产品推荐

