首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript数组循环

Javascript数组循环
EN

Stack Overflow用户
提问于 2015-12-13 10:03:12
回答 5查看 94关注 0票数 0

是否有可能像这样循环遍历数组。我想我需要改变数组数据的顺序。

阵列:

代码语言:javascript
运行
复制
var cars = [];

cars.push(["Volvo", "BMW", "Saab", "Land Rover"]);
cars.push([22, 15, 5, 17]);
cars.push([18, 13, 2, 15]);

var arrayLength = cars.length;

for (var i = 0; i < arrayLength; i++) {
 document.write(cars[0] + ' - ' + cars[1] + ' - ' + cars[2]);
}

结果

沃尔沃- 22 - 18

宝马- 15 - 13

萨博-5-2

路虎- 17 - 15

EN

回答 5

Stack Overflow用户

发布于 2015-12-13 10:21:56

你会发现把你的数据重组成更有意义的东西会更有用。这里我使用了一个对象:

代码语言:javascript
运行
复制
var cars = {
  'Volvo': [22, 18],
  'BMW': [15, 13],
  'Saab': [5, 2],
  'Land Rover': [17, 15]
}

for (var p in cars) {
  console.log(p + ' - ' + cars[p].join(' - '));
}

输出

代码语言:javascript
运行
复制
Volvo - 22 - 18
BMW - 15 - 13
Saab - 5 - 2
Land Rover - 17 - 15

演示

票数 0
EN

Stack Overflow用户

发布于 2015-12-13 10:24:51

你在循环但使用硬编码的索引..。

@尼尼索尔兹的答案是正确的,但是我会更进一步,这样您就不会依赖于数组大小:

代码语言:javascript
运行
复制
var cars = [];

cars.push(["Volvo", "BMW", "Saab", "Land Rover"]);
cars.push([22, 15, 5, 17]);
cars.push([18, 13, 2, 15]);

var arrayLength = cars.length, // will output 3
    carsLength = cars[0].length; // will output 4
  
for (var iCar = 0; iCar < carsLength; iCar++) {
  var carLine = []; // to hold all values for this car
    
  for(var iSize = 0; iSize < arrayLength; iSize++) {
    // add all values for this car
    carLine.push(cars[iSize][iCar]); 
  }

  // print it by joining all car values
  document.write(carLine.join(' - ') + '<br/>');
}

这样您就不会被绑定到数组的大小.例如,您可以轻松地拥有以下内容:

代码语言:javascript
运行
复制
cars.push(["Volvo", "BMW", "Saab", "Land Rover", "Mercedes"]);
cars.push([22, 15, 5, 17, 22, 32]);
cars.push([18, 13, 2, 15, 4, 5]);

代码将完美无缺地工作。

另外,一个改进是将数组排序添加到它自己的函数中,然后调用函数,如下所示:

代码语言:javascript
运行
复制
function getCarsWithFeatures(arr) {

    var arrayLength = cars.length, // will output 3
        carsLength = cars[0].length, // will output 4
        allCars = [];

    for (var iCar = 0; iCar < carsLength; iCar++) {
      var carLine = []; // to hold all values for this car

      for(var iSize = 0; iSize < arrayLength; iSize++) {
        // add all values for this car
        carLine.push(cars[iSize][iCar]); 
      }

      // print it by joining all car values
      allCars.push( carLine.join(' - ') );
    }

    return allCars;
}

然后你就可以轻松地拥有:

代码语言:javascript
运行
复制
var cars = [];

cars.push(["Volvo", "BMW", "Saab", "Land Rover", "Mercedes", "Audi"]);
cars.push([22, 15, 5, 17, 22, 32]);
cars.push([18, 13, 2, 15, 4, 5]);

var allCars = getCarsWithFeatures(cars);

for(var i = 0; i < allCars.length; i++)
    document.write( allCars[i] + '<br/>' );

注意:在编写代码时,尝试以一种不重复的方式编写代码,如果“源”发生了更改,它是可扩展的.

票数 0
EN

Stack Overflow用户

发布于 2015-12-13 10:36:25

这就是"zip“函数可以帮助的地方。使用锁存库的示例

代码语言:javascript
运行
复制
var tuples = _.zip(cars[0], cars[1], cars[2]);

然后按要求格式化:

代码语言:javascript
运行
复制
tuples.forEach(function (tuple) {
  document.write(tuple.join(' - ') + ' <br/>')
});

您可以简单地包括存档(取决于您处理依赖项的方式):

代码语言:javascript
运行
复制
<script src="https://cdn.rawgit.com/lodash/lodash/3.0.1/lodash.min.js"></script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34249915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档