循环以创建相同长度字符串的数组数组



我正在尝试创建一个数组数组,这些数组根据它们的长度(字符串(分组,以便下面的数组:

var testA = ["carts","carts","cars","cars","ca","ca", "ca","a","a","a","a"];

将变成:

var sortedArrays = [["carts","carts"], ["cars","cars"],["ca","ca","ca"], ["a","a","a","a"]]

我目前正在尝试下面的循环,但根本无法让它工作。我知道这会很简单,但我花了很长时间试图完成这个,没有,事实证明它非常令人沮丧。

var testA = ["carts","carts","cars","cars","ca","ca", "ca","a","a","a","a"];
var sortedArrays = [];
for(i=0; i < testA.length; i++){
longestWord = 0;
wordHolder = []
wordHolder.push(testA[i])    
if (testA[i].length > longestWord){
longestWord = testA[i].length
wordHolder.push(testA[i])
}
sortedArrays.push(wordHolder)
}

任何帮助将不胜感激

下面的代码呢(Swift,但用其他语言重新表述它应该很容易(:

let testA = ["carts","carts","cars","cars","ca","ca", "ca","a","a","a","a"]
var maxLength = 0
for string in testA {
if string.count > maxLength { maxLength = string.count }
}
var sortedArrays: [[String]] = []
for nextLength in 0 ... maxLength {
let invertedLength = maxLength - nextLength
let nextArray = testA.filter { $0.count == invertedLength }
sortedArrays.append(nextArray)
}

此代码还会创建空数组,当然可以轻松跳过这些数组。

当然,问题是您的要求是什么。上面的代码很紧凑,但对于大型数组来说并不快......
对于大型数组,最好先对 testA 进行排序,然后再提取元素。

坚持使用java脚本,我能够做到以下几点。我的假设是单词已经按长度降序排序,并且每个长度只有一个单词。这是基于你在做什么。我认为发生的事情是每次通过循环初始化或重置太多内容。

var testA = ["carts", "carts", "cars", "cars", "ca", "ca", "ca", "a", "a", "a", "a"];
var sortedArrays = [];
var wordHolder = []; // took outside loop to ensure initialized
var curLength = testA[0].length;// assuming here that testA not empty
for (var i = 0; i < testA.length; i++) {
if (testA[i].length === curLength) { // more of the same
wordHolder.push(testA[i]);
} else { // new block starts
curLength = testA[i].length;
sortedArrays.push(wordHolder);
// alert (wordHolder)
// alert (sortedArrays)
wordHolder = [];
wordHolder.push(testA[i]);
}
}
sortedArrays.push(wordHolder);// add the last one

最新更新