作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
循环两个数组以产生交替输出的有效方法是什么?在 JavaScript 中。
如果我有两个像这样的数组:
var oddNumbers = [1, 3, 5, 7, 9]
var evenNumbers = [2, 4, 6, 8, 10, 12, 14]
注意:数组的长度可能不同
如何获得以下输出?
Output: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14
我原以为这会起作用:
if (oddNumber.length > evenNumbers.length) {
var large = oddNumbers;
} else {
var large = evenNumbers;
}
for(var i = 0; i < large.length; i++){
if (evenNumbers.length >= i && oddNumbers.length >= i) {
console.log(oddNumbers[i] + ", " + evenNumbers[0]);
} elseif (evenNumbers.length >= i) {
console.log(evenNumbers[0]);
} else {
console.log(oddNumbers[0]);
}
}
但是它非常困惑,有没有更好的方法来解决这个问题?
注意:这些不一定是数字顺序,或者实际上是数字
最佳答案
如果你只想输出它们,我宁愿这样做:
var oddNumbers = [1, 3, 5, 7, 9];
var evenNumbers = [2, 4, 6, 8, 10, 12, 14];
for (var i=0, j=0; i < oddNumbers.length || j < evenNumbers.length;) {
if (i < oddNumbers.length) {
console.log(oddNumbers[i++]);
}
if (j < evenNumbers.length) {
console.log(evenNumbers[j++]);
}
}
如果您想将合并结果作为另一个数组获取,您可以将 console.log 替换为 result.push
以将结果值推送到名为 result
的数组中,如下所示:
var oddNumbers = [1, 3, 5, 7, 9];
var evenNumbers = [2, 4, 6, 8, 10, 12, 14];
var result = [];
for (var i=0, j=0; i < oddNumbers.length || j < evenNumbers.length;) {
if (i < oddNumbers.length) {
result.push(oddNumbers[i++]);
}
if (j < evenNumbers.length) {
result.push(evenNumbers[j++]);
}
}
console.log(result);
只要其中一个数组包含我们尚未访问的元素,您就可以通过这种方式迭代两个数组,并且还可以防止对同一数组的同一索引进行两次迭代。请注意,我在 if block 中使用增量来节省 2 行代码。您还可以将它们移至 for 循环,因为它们不会中断 if 语句。
关于javascript - 遍历两个(不同长度的)数组以产生交替输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38720395/
我是一名优秀的程序员,十分优秀!