【问题标题】:How do I add multiple elements to an array X times, based on a value from a second array? [closed]如何根据第二个数组中的值将多个元素添加到数组 X 次? [关闭]
【发布时间】:2021-04-15 08:01:28
【问题描述】:

我有两个数组,它们的长度相同。

let servers = ['Node1', 'Node2', 'Node3']
let counts = ['3', '4', '8']

我想创建一个新数组,它的第一个元素重复 X 次,X 是第二个数组中的数字。输出应该类似于这样:

['Node1', 'Node1', 'Node1', 'Node2', 'Node2', 'Node2', 'Node2', 'Node3', 'Node3', 'Node3', 'Node3', 'Node3', 'Node3', 'Node3', 'Node3']

Node1重复3次,Node2重复4次,Node3重复8次。

两个数组的长度可以不同,服务器也可以有不同的名称。

这是我尝试过的:

  • 嵌套 forEach 两个数组,但使用上面的示例,这最多只打印 3 次。
await response.servers.forEach(async (serverName) => {
    await response.counts.forEach(async (nodeNumber) => {
        let number = Number(nodeNumber);
        console.log(`serverName: ${serverName} | number: ${number}`);
    });
});

【问题讨论】:

  • 使用for 循环遍历两个数组。然后使用嵌套循环将服务器名称推送到结果数组指定的次数。
  • 欢迎来到 Stack Overflow! StackOverflow 不是免费的编码服务。你应该try to solve the problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)

标签: javascript node.js arrays


【解决方案1】:

为什么在这个任务中使用async/await,而不是使用mapflat

let servers = ["Node1", "Node2", "Node3"];
let counts = ["3", "4", "8"];

const result = servers
  .map((s, index) => {
    const count = counts[index];
    const rep = Array(parseInt(count)).fill(s);
    return rep;
  })
  .flat();

console.log(result);

语法更短

let servers = ["Node1", "Node2", "Node3"];
let counts = ["3", "4", "8"];

const result = servers
  .map((s, index) => Array(parseInt(counts[index])).fill(s))
  .flat();

console.log(result);

一个班轮使用flatMap

let servers = ["Node1", "Node2", "Node3"];
let counts = ["3", "4", "8"];

const result = servers.flatMap((s, index) => Array(parseInt(counts[index])).fill(s));
console.log(result);

【讨论】:

    【解决方案2】:

    使用这样的嵌套 for 循环遍历第一个列表中的每个元素,获取它的位置,找到它在第二个列表中的位置,然后重复多次。我制作了第二个列表整数,它更好,但如果Number(counts[i]) 需要,您可以在第二个 for 循环中转换它@

    let servers = ['Node1', 'Node2', 'Node3']; 
    let counts = [3, 4, 8];
    let newList  = [];
    
    for (i = 0; i < servers.length; i++){
        for (i2 = 0; i2 < counts[i]; i2++){
            newList.push(servers[i])
        }
    
    }
    
    console.log(newList);
    

    【讨论】:

      【解决方案3】:

      正如您也尝试过的那样,只需使用两个循环:一个用于读取重复次数,另一个用于添加元素.. :)

      var servers = ['Node1', 'Node2', 'Node3'];
      var counts = ['3', '4', '8'];
      var arr = [];
      for(var i = 0; counts[i]; i++){  // Retrieve the number of times the string will have to be repeated 
          for(var k = 0; k < counts[i]; k++) arr[arr.length] = servers[i]; // I add the elements to the new array 
      }
      console.log(arr); // I see the array 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        相关资源
        最近更新 更多