将数组拆分为包含字符串的多个子数组

3

我希望能够获取任意长度的数组(例如,此处长度为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 个一组,然后再应用字符串转换代码,但都没有成功。

如果有任何帮助或想法,将不胜感激。谢谢。

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


它必须是嵌套数组吗?它不能是一个字符串数组吗? - Rahul Bhobe
可能是重复问题:将数组分成块 - Andreas
5个回答

6
你可以使用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快速明确的答案。 - Rumpo

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);


1
OP似乎在询问嵌套数组。 - Rahul Bhobe
谢谢Nina,我看到这个可以在不破坏原始数组的情况下工作。干杯! - Rumpo

2
请使用 array splice 并使用所需的分隔符 join 进行连接。
这种方法不会改变现有数据。

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);


1
你可以使用 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, '%'));


0

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将其缩减为三行代码。 - Always Helping
真的,但是更短的代码并不总是容易为初学者所理解。通过将问题分解成小步骤,过程更容易理解,并希望教给读者一些有用的函数。 - Cerbrus
我同意 - 提供额外的信息来帮助初学者。 - Always Helping

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接