【问题标题】:Combine elements from two arrays into subarrays in a third array将两个数组中的元素组合成第三个数组中的子数组
【发布时间】:2016-04-11 18:06:12
【问题描述】:

我从两个等长数组开始,我想创建一个由子数组组成的新数组,每个子数组都是由两个数组的每个索引处的元素组合而成。这就是我的意思:

// the 2 initial arrays:
var arr1 = ["Quote1", "Quote2", "Quote3"];
var arr2 = ["Author1", "Author2", "Author3"];

// the output I need to achieve:
[ ["Quote1", "Author1"], ["Quote2", "Author2"], ["Quote3", "Author3"] ];

问题是我的代码向console.log 产生了以下输出:

Array [ Array[2], Array[2], Array[2] ]

我得到的有问题的输出没有显示每个子数组的实际值,它只显示了每个子数组的长度。

这是我的代码:

var quotesArr = ["Quote 1", "Quote 2", "Quote 3"];

var authorsArr = ["Author 1", "Author 2", "Author 3"];

var quoteMeetsAuthor = [];

var quotesAndAuthors = [];


function combineArrays(quotes,authors) {
  if (quotes.length != authors.length) {
    console.log("Danger Will Robinson!");
    return "Danger Will Robinson!";
  }

  for (i=0; i<quotes.length; i++) {
    quoteMeetsAuthor.push(quotes[i]);
    quoteMeetsAuthor.push(authors[i]);
    quotesAndAuthors.push(quoteMeetsAuthor);
    quoteMeetsAuthor = [];
  }
  console.log(quotesAndAuthors);
  return quotesAndAuthors;
}

combineArrays(quotesArr, authorsArr);

有人可以提供建议吗?

编辑:我想用原生 javascript 解决这个问题。

【问题讨论】:

  • google zip javascript 数组。许多库(lodash、下划线等)都实现了该功能,我最喜欢 Ramda。
  • 代码看起来不错,在 FireFox 中的输出也是正确的。
  • 您的代码有效。您的控制台不会像您想要的那样显示阵列。使用另一个浏览器,该浏览器的控制台行为符合您的要求。或者对数组进行字符串化。
  • 我投票结束这个问题作为题外话,因为代码有效。唯一的问题是 OP 的开发人员工具的行为不像他预期的那样。
  • @BrianZ 我也看到了与您看到的相同的输出。问题是浏览器控制台可以随意表示对象。我认为您的规范缺少一些东西。因为你当前的输出和预期的输出是完全一样的。只是在屏幕上的表现不同。

标签: javascript arrays


【解决方案1】:

这是我为解决您的问题而提出的。此外,尝试使用 alert() 而不是 console.log() 来查看真实结果。 console.log() 有时不会显示所有内容,因此您需要扩展它存储的一些内容:

var arr1 = ["Quote1", "Quote2", "Quote3"];
var arr2 = ["Author1", "Author2", "Author3"];

// the output I need to achieve:
//[ ["Quote1", "Author1"], ["Quote2", "Author2"], ["Quote3", "Author3"] ];

var newArr = [[],[],[]];

for(var i = 0; i < newArr.length; i++){
    newArr[i].push(arr1[i]);
    newArr[i].push(arr2[i]);
}

alert(newArr);

【讨论】:

  • 谢谢@paulg,但我需要以编程方式扩展它以满足我的实际需要(即 - 每个初始数组中的元素超过 3 个),所以硬编码我要赢得的子数组的数量不行。
  • 但是你建议使用 alert() 是对的——输出确实符合我的预期,谢谢!
猜你喜欢
  • 2022-11-12
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
相关资源
最近更新 更多