如何使用Lodash实现数组自复制拼接?myMapping需变为原长度两倍
如何用Lodash或原生JS实现数组自拼接(长度翻倍)
首先得明确:如果你的myMapping是数组的话,不能直接用+运算符——数组相加会被转换成字符串拼接,结果会变成类似"1,23,4"这样的字符串,完全不是你要的数组翻倍效果。下面是正确的实现方式:
使用Lodash的方案
Lodash提供了几个简洁的方法来完成这个需求:
1. 用_.concat()合并数组
这是最直观的方法,_.concat()可以接受多个数组参数,直接把原数组传两次就能得到拼接后的新数组:
const myMapping = [1, 2, 3]; const doubledMapping = _.concat(myMapping, myMapping); // doubledMapping 结果: [1, 2, 3, 1, 2, 3]
这个方法不会修改原数组,会返回一个全新的数组,适合需要保留原数据的场景。
2. 用_.fill() + _.flatten()组合
如果你想换一种写法,也可以先创建一个长度为2的数组,每个元素填充为原数组,再展开成一维数组:
const myMapping = [1, 2, 3]; const doubledMapping = _.flatten(_.fill(Array(2), myMapping)); // 结果同样是: [1, 2, 3, 1, 2, 3]
原生JavaScript的方案(无需Lodash)
如果你的项目没有引入Lodash,用原生JS也能轻松实现:
1. 扩展运算符(最简洁)
ES6的扩展运算符可以快速展开数组,直接拼接两次:
let myMapping = [1, 2, 3]; myMapping = [...myMapping, ...myMapping]; // myMapping 现在是: [1, 2, 3, 1, 2, 3]
2. 原生Array.concat()方法
和Lodash的_.concat()逻辑一致,原生数组本身就有concat方法:
let myMapping = [1, 2, 3]; myMapping = myMapping.concat(myMapping); // 结果同上
不管用哪种方法,最终都能让数组长度变成原来的两倍,并且完全保留原数组的元素顺序和重复项,完全符合你“不去重,只是复制翻倍”的需求。
内容的提问来源于stack exchange,提问作者AnApprentice
相关产品推荐
相关产品推荐

