我想创建一个包含每个字母表的二维数组。问题是,我只能创建一个包含所有字母表的二维数组。 我执行以下操作。
function groupAnimals(animals) {
var sort = []
var alphabet = 'abcdefghijklmnopqrstuvwxyz'
var temp = []
for(var i = 0; i < alphabet.length; i++){
for(var j = 0; j < animals.length; j++){
if(animals[j][0] == alphabet[i]){
temp.push(animals[j])
}
}
}
sort.push(temp)
return sort
}
console.log(groupAnimals(['bear', 'chicken', 'dolphin', 'cat', 'tiger']));
console.log(groupAnimals(['elephant', 'fish', 'horse', 'bird', 'flamingo', 'dog', 'ant' ]));
但是输出是
[ [ 'bear', 'chicken', 'cat', 'dolphin', 'tiger' ] ]
[ [ 'ant', 'bird', 'dog', 'elephant', 'fish', 'flamingo', 'horse' ] ]
而不是
[ ['bear'], ['chicken', 'cat], ['dolphin'], ['tiger'] ]
[ ['ant'], ['bird'], ['dog'], ['elephant'], ['fish', 'flamingo'], ['horse']]
我尝试在字母循环后先创建一个数组 temp,然后将动物的名字插入其中,但它太手动,消耗时间,如果没有这样的字符,将会有一个空数组。我想通过循环来做到这一点,但我不知道如何进行循环。
function groupAnimals(animals) {
var sort = []
var alphabet = 'abcdefghijklmnopqrstuvwxyz'
for(var i = 0; i < alphabet.length; i++){
var A = []
var B = []
var C = []
var D = []
var E = []
var F = []
var T = []
for(var j = 0; j < animals.length; j++){
if(animals[j][0] == 'a'){
A.push(animals[j])
} else if(animals[j][0] == 'b'){
B.push(animals[j])
} else if(animals[j][0] == 'c'){
C.push(animals[j])
} else if(animals[j][0] == 'd'){
D.push(animals[j])
} else if(animals[j][0] == 'e'){
E.push(animals[j])
} else if(animals[j][0] == 'f'){
F.push(animals[j])
} else if(animals[j][0] == 't'){
T.push(animals[j])
}
}
}
sort.push(A)
sort.push(B)
sort.push(C)
sort.push(D)
sort.push(E)
sort.push(F)
sort.push(T)
return sort
}
结果是
[ [],
[ 'bear' ],
[ 'chicken', 'cat' ],
[ 'dolphin' ],
[],
[],
[ 'tiger' ] ]
[ [ 'ant' ],
[ 'bird' ],
[],
[ 'dog' ],
[ 'elephant' ],
[ 'fish', 'flamingo' ],
[] ]
最好使用数组和循环
最佳答案
归约为数组对象,其中键是值数组中单词的第一个字母,然后使用 Object.values
将其转换回数组数组:
const groupAnimals = (animals) => {
const sorted = animals.slice().sort();
const groupedObj = sorted.reduce((a, word) => {
const key = word[0];
if (!a[key]) {
a[key] = [];
}
a[key].push(word);
return a;
}, {});
return Object.values(groupedObj);
};
console.log(groupAnimals(['bear', 'chicken', 'dolphin', 'cat', 'tiger']));
console.log(groupAnimals(['elephant', 'fish', 'horse', 'bird', 'flamingo', 'dog', 'ant']));
上面的方法可行,但如果您担心规范未正式保证属性顺序,您可以随后对数组的数组进行排序:
const groupAnimals = (animals) => {
const groupedObj = animals.reduce((a, word) => {
const key = word[0];
if (!a[key]) {
a[key] = [];
}
a[key].push(word);
return a;
}, {});
return Object.values(groupedObj)
.sort((a, b) => a[0][0].localeCompare(b[0][0]));
};
console.log(groupAnimals(['bear', 'chicken', 'dolphin', 'cat', 'tiger']));
console.log(groupAnimals(['elephant', 'fish', 'horse', 'bird', 'flamingo', 'dog', 'ant']));
关于javascript - 如何在不知道javascript数组长度的情况下创建二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57940871/