假设有一个数组
[1, 2, 3, 4]
我希望第一个元素重复3次,其余元素重复2次。
最后我想拥有这样的东西 [1,1,1,2,2,3,3,4,4]
我知道我们可以编写一个虚拟循环。但是还有更好的方法吗?
答案 0 :(得分:6)
您可以使用flatMap()
。根据索引创建长度为2
或3
的数组,并使用element fill()
创建数组。
let arr = [1, 2, 3, 4]
let res = arr.flatMap((x,i) => Array(i === 0 ? 3 : 2).fill(x))
console.log(res)
要获得更通用的解决方案,请创建一个包含三个参数的函数。
const createArray = (arr,times,obj) => arr.flatMap((x,i) => Array(obj[i] || times).fill(x))
arr :给定数组,其值将重复。
次:每个元素没有重复的次数。
obj :一个对象,其键为索引,其值不重复该索引处的元素的次数。
const createArray = (arr,times,obj) => arr.flatMap((x,i) => Array(obj[i] || times).fill(x))
let arr = [1,2,3,4];
const obj = {0:5,3:3}
let res = createArray(arr,2,obj);
//1 will be repeated 5 times. 4 will be repeated 3 times and all others two tiems
console.log(res)
答案 1 :(得分:2)
使用reduce
并检查索引,然后使用传播:
const arr = [1, 2, 3, 4];
const res = arr.reduce((acc, curr, idx) => {
acc.push(curr, curr);
if (idx == 0) acc.push(curr);
return acc;
}, []);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }