javascript - 如何在不知道javascript数组长度的情况下创建二维数组?

标签 javascript arrays loops

我想创建一个包含每个字母表的二维数组。问题是,我只能创建一个包含所有字母表的二维数组。 我执行以下操作。

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/

相关文章:

javascript - JavaScript 中的方法 .click()

javascript - Angular 路线不起作用并且不改变当前 View

arrays - 在vba中随机播放数组

python - 在二维数组中随机放置n个元素

postgresql - 测量执行 PostgreSQL 查询所需的时间

c - while 循环运行一次迭代,不管

javascript - 使用 JS(失败)和 CURL(工作)在 Asana 中创建任务

javascript - Nodejs应用程序结构

python - 有没有办法有效地按对角线顺序展平 numpy 数组?

c - 在 C 的数组中打印 2 个数字并跳过 2 个数字