JavaScript如何按对应顺序拼接生成指定格式排序字符串数组
问题根源
你写的嵌套循环逻辑从根上破坏了原数据里sortType和sortField的绑定关系:
- 你先把所有排序字段、排序类型分别拆成了两个独立数组,丢失了每个对象里两个属性的配对关系
- 外层遍历排序类型时,内层循环会把全部排序字段都追加到结果里,相当于给每一个排序类型都匹配了所有字段,最后输出的内容长度、对应关系完全错误。这种场景下加循环标签、
continue都没用,属于逻辑思路走偏了。
最优实现
根本不需要把字段、类型拆成三个数组来回倒,直接遍历原始参数数组,单次循环里就能完成符号判断和字符串拼接,代码简洁还不会出对应关系错误:
const param = [{ sortType: "ascending", sortField: "id", }, { sortType: "descending", sortField: "title", }, ]; const sortString = param.map(item => { const sign = item.sortType === "ascending" ? "+" : "-"; return sign + item.sortField; }); console.log(sortString); // 输出结果:["+id","-title"]
按你思路的修正方案
如果你坚持要先把字段、类型拆成两个独立数组再拼接,也不需要用嵌套循环——两个数组长度完全一致,按下标一一对应取值拼接就可以:
const param = [{ sortType: "ascending", sortField: "id", }, { sortType: "descending", sortField: "title", }, ]; let sortFields = []; let sortTypes = []; let sortString = []; for (let p of param) { sortFields.push(p.sortField); sortTypes.push(p.sortType); } // 单循环按下标配对,不要嵌套 for (let i = 0; i < sortFields.length; i++) { const sign = sortTypes[i] === "ascending" ? "+" : "-"; sortString.push(sign + sortFields[i]); } console.log(sortString); // 输出结果:["+id","-title"]
这种拆分方案多了两次无意义的数组遍历,代码冗余度更高,更推荐直接遍历原数组的写法。
内容的提问来源于stack exchange,提问作者Slaveworx
相关产品推荐
相关产品推荐

