如何重复数组中的不同元素?

时间:2019-05-02 01:53:05

标签: javascript arrays node.js

假设有一个数组

[1, 2, 3, 4]

我希望第一个元素重复3次,其余元素重复2次。

最后我想拥有这样的东西 [1,1,1,2,2,3,3,4,4]

我知道我们可以编写一个虚拟循环。但是还有更好的方法吗?

2 个答案:

答案 0 :(得分:6)

您可以使用flatMap()。根据索引创建长度为23的数组,并使用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; }