如何在Javascript中从小数组填充大数组

时间:2018-11-01 17:51:47

标签: javascript arrays

假设我有一个数组:

const A = [1,2,3]

,我想用B的元素填充另一个数组,例如AB.length >> A.length

我对可以帮助创建以下格式的数组B的任何函数感兴趣:

[1,1,1,2,2,2,2,2,3,3,3,3,2,2,2,1,3,1]

A元素到B中的位置取决于指定的索引限制。元素1可以放置在B中的几个指定位置/间隔中。B的长度是已知的; NB的长度。

在我的试用版中,我尝试使用array.fill函数,但不知道如何获取开始索引和结束索引。任何帮助将不胜感激。

const A = [1,2,3];
const B = [];
for (let k = 0; k < A.length; k++){
  for (let j = 0; j < N; j++){
    B.fill(A[k], start_index[j], end_index[j]);
  }
}

2 个答案:

答案 0 :(得分:1)

由于要用B的相同元素填充A的多个范围,因此需要具有多个start/end/index组合的数据结构。

.fill()不会单独扩展数组的长度,因此在添加新元素时需要调整长度。

const params = [
    {index: 0, start: 0, end: 3},
    {index: 1, start: 3, end: 8},
    {index: 2, start: 8, end: 12},
    {index: 1, start: 12, end: 15},
    {index: 0, start: 15, end: 16},
    {index: 2, start: 16, end: 17},
    {index: 0, start: 17, end: 18}
];
const A = [1, 2, 3];
const B = [];
params.forEach(({index, start, end}) => {
  if (B.length < end) {
    B.length = end;
  }
  B.fill(A[index], start, end)
});

console.log(B);

答案 1 :(得分:0)

为了凝聚巴尔玛的建议:

const params = [
    {index: [0,1,2,1,0,2,0], start: [0,3,8,12,15,16,17], end: [3,8,12,15,16,17,18]}
];
const A = [1, 2, 3];
const B = [];
for (let j=0; j<7;j++){
params.forEach(({index, start, end}) => {
  if (B.length < end[j]) {
    B.length = end[j];
  }
  B.fill(A[index[j]], start[j], end[j])
});
}

console.log(B);