有没有一种方法可以在JavaScript循环中使用.splice()添加元素?

问题描述 投票:0回答:2

我有一个像这样的数组:

[0, 24.646213151927437, 27.737256235827665, 29.08326530612245]

我想用随机数填充大于4的元素之间的每个空格。像这样:

var arr = [0, 24.646213151927437, 27.737256235827665, 29.08326530612245];
var length = arr.length;
for (var j = 0; j < length;) {
  var spacebetween = arr[j + 1] - arr[j];
  if (spacebetween > 4) {
    // fill the space until the sum of numbers is greater than space between
    var m = Math.random() * (3 - 1 + 1);
    for (k = m; k < spacebetween;) {
      arr.splice(j, 0, parseFloat(k));
      m = Math.random() * (3 - 1 + 1);
      k = k + m;
    }
  }
  j++;
}
console.log(arr);

问题出在splice()上,索引在变化,我不知道该如何解决。新数字应在数组中按升序排列。

javascript arrays loops splice
2个回答
0
投票

不是循环遍历数组(长度是变化的,而是可以使用reduce遍历原始数组并将更新推送到累加器中)>

var arr = [0, 24, 27, 29];
var newArr = arr.reduce((accumulator, cur, i) => {
    var needTempArr = arr[i + 1] && (arr[i + 1] - cur);

    // if need temp array, generate it; otherwise, empty array
    var tempArr = needTempArr
        ? Array(needTempArr).fill(0).map(() => Math.random())
        : [];


    return accumulator.concat(cur, tempArr);
}, []);

    

0
投票

解决方案只是向后退:

© www.soinside.com 2019 - 2024. All rights reserved.