【问题标题】:Split Array into multiple Arrays containing string将数组拆分为多个包含字符串的数组
【发布时间】:2020-10-19 07:45:29
【问题描述】:

我想取一个任意长度的数组(在这个例子中长度为 10):

var fruits = ["Banana", "Orange", "Apple", "Mango", "Strawberry", "Lime", "Kiwi", "Melon", "Pineapple", "Date"];

我想从这个数组中获取以 5 为增量的元素,将每个增量转换为一个字符串,然后将每个字符串作为一个嵌套数组存储在一个新数组中。每个元素都需要用“%”分隔。

类似的输出:

newArray = [[ 'Banana%Orange%Apple%Mango%Strawberry' ],[ 'Lime%Kiwi%Melon%Pineapple%Date' ]]

要转换成我正在使用的字符串:

var finalArray = Array()
    var x = ""
        for(i = 0; i < fruits.length; i++){
            if(i==fruits.length-1){
                x = x + fruits[i].toString()
            }
            else {
                x = x + fruits[i].toString()+'%'
            }       
        } finalArray.push([x])

哪些输出:

[['Banana%Orange%Apple%Mango%Strawberry%Lime%Kiwi%Melon%Pineapple%Date']]

我尝试了许多 for & forEach 循环、if/else 语句等,以便在应用字符串转换代码之前将原始数组拆分为增量 5,但均未成功。

任何有关如何实现的帮助或想法将不胜感激。谢谢。

编辑:谢谢大家,这已经回答了我的问题:)

【问题讨论】:

标签: javascript node.js arrays


【解决方案1】:

您可以使用Array#splice 并裁剪数组直到它为空:

var fruits = ["Banana", "Orange", "Apple", "Mango", "Strawberry", "Lime", "Kiwi", "Melon", "Pineapple", "Date"];

var result = [];

while (fruits.length) {
  result.push([fruits.splice(0, 5).join('%')]);
}

console.log(result);

【讨论】:

  • 这绝对完美 - 感谢 Sebastian 快速而清晰的回答。
【解决方案2】:

您可以对数组进行切片并将其与所需的分隔符连接起来。

这种方法不会改变给定的数据。

var fruits = ["Banana", "Orange", "Apple", "Mango", "Strawberry", "Lime", "Kiwi", "Melon", "Pineapple", "Date"],
    separator = '%',
    size = 5,
    index = 0,
    result = [];

while (index < fruits.length) {
    result.push([fruits.slice(index, index += size).join(separator)]);
}

console.log(result);

【讨论】:

  • OP 似乎要求嵌套数组。
  • 谢谢尼娜,我看到这在不破坏原始数组的情况下有效。干杯
【解决方案3】:

请将array splicejoin 与所需的分隔符一起使用。

这种方法不会改变现有数据。

var fruits = ["Banana", "Orange", "Apple", "Mango", "Strawberry", "Lime", "Kiwi", "Melon", "Pineapple", "Date"],
separator = '%',
result = []

while (fruits.length) {
  result.push([fruits.splice(0, 5).join(separator)]);
}

console.log(result);

【讨论】:

    【解决方案4】:

    您可以使用splice() 分割和加入所需的字符串.join()

    var fruits = ["Banana", "Orange", "Apple", "Mango", "Strawberry", "Lime", "Kiwi", "Melon", "Pineapple", "Date"];
    
    function convert(array, increment, separator) {
        let result = [];
        while(array.length >= 1) {
            result.push([array.splice(0, increment).join(separator)]);
        }    
        return result;
    }
    console.log(convert(fruits, 5, '%'));
    console.log(convert(fruits, 3, '%'));

    【讨论】:

      【解决方案5】:

      const fruits = ["Banana", "Orange", "Apple", "Mango", "Strawberry", "Lime", "Kiwi", "Melon", "Pineapple", "Date"];
      const result = []
      
      // Loop over all the fruits.
      for(let i = 0; i < fruits.length; i++){
        // Get the current fruit's sub-index.
        let idx = Math.floor(i/5);
        // Make sure the subarray exists.
        result[idx] = result[idx] || [];
        // Push the current fruit to the subarray.
        result[idx].push(fruits[i]);
      }
      
      // Now we have an nested array of arrays, you want to replace the sub-arrays with joined strings.
      for(let i = 0; i < result.length; i++){
        result[i] = [result[i].join('%')];
      }
      
      console.log(result);

      【讨论】:

      • 不错的努力 - 但这可以通过执行三行代码来完成。通过使用forEachsplice
      • 没错,但是对于初学者来说,较短的代码并不总是很容易理解。通过将问题分解为小步骤,过程更容易理解,并希望能教会读者一些有用的功能。
      • 我同意 - 帮助初学者获得额外的附加信息。
      猜你喜欢
      • 2020-10-15
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多