【问题标题】:Update array of numbers so they are after each other更新数字数组,使它们彼此之后
【发布时间】:2021-06-26 07:37:49
【问题描述】:

我有一组数字,用户可以在页面中添加和删除。我需要排列数组中的数字,以便在添加/删除数字时它们总是一个接一个

const numbers = [1,2,3,4,5,6,7,8] 

5 已从我如何修复的数组中删除,因此这些数字彼此之后,例如在下面

数字必须是[1,2,3,4,5,6,7]

或者如果 2 被删除

numbers need to be [1,2,3,4,5,6,7] 

有没有办法用 lodash 或 es6 解决这个问题?

【问题讨论】:

  • 如何删除一个号码而号码仍然存在?
  • 你最好的选择是做你的研究,search 以获取有关 SO 的相关主题,然后试一试。 如果您在进行更多研究和搜索后遇到困难并且无法摆脱困境,请发布您的尝试minimal reproducible example,并具体说明您卡在哪里。人们会很乐意提供帮助。
  • @NinaScholz - 我认为他们的意思是,他们删除了5,留下了[1, 2, 3, 4, 6, 7, 8],然后想要调整后续值,最终得到[1, 2, 3, 4, 5, 6, 7](没有@ 987654329@).

标签: javascript ecmascript-6 lodash


【解决方案1】:

从数组中删除数字后,您可以使用 for 循环对其进行迭代,并将该索引号分配给数组中的该位置。

const numbers = [1,2,3,4,5,6,7,8] 
numbers.splice(1, 1)     //2 was removed
for(var i = 0; i < numbers.length; i++){
  numbers[i] = i+1;
} 

【讨论】:

  • const numbers = [1,1,1,2,3,4,5,6,7,8] numbers.splice(1, 1) //2 被移除 for(var i = 0; i
【解决方案2】:

我会这样做。

删除数字后,循环遍历数组并将数字设置为数组的索引。

使用.forEach()

const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
addEventListener('click', _ => {
  const removed = array.splice(Math.floor(Math.random() * array.length), 1);
  array.forEach((_, i) => array[i] = i);

  console.log(`Removed: `, removed[0]);
  console.log(`New Array`, array);
});

使用.map()

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
addEventListener('click', _ => {
  const removed = array.splice(Math.floor(Math.random() * array.length), 1);
  array = array.map((_, i) => i);

  console.log(`Removed: `, removed[0]);
  console.log(`New Array`, array);
});

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多