【问题标题】:Checking the lengths of all my arrays in Javascript在Javascript中检查我所有数组的长度
【发布时间】:2016-10-20 19:13:49
【问题描述】:

我的目标是拥有一堆数组,para1,para2.... para20,并找到其中包含多个元素的所有数组,然后能够访问它们。例如,我想要一个 for 循环中的 if 语句,它基本上会检查我的所有数组以查看哪些数组有多个元素。然后,对于确实有多个元素的元素,我会使用 if 语句从每个数组中提取特定项。

var para1 = ["NB4-CAXL-14U-12-"];
var para2 = ["K"];
var para3 = ["-270°C to 1372°C, –454°F to 2501°F"];
var para4 = ['1/8"', '3/16"', '1/4"'];
var para5 = ['6"', '12"', '18"'];

for (var j = 1; j < 10; j++) {
    var lenId = "para" + j;
    console.log(lenId.length);
}

document.getElementById("demo").innerHTML = typeof lenId;

我定义了几个数组并创建了一个 for 循环,该循环生成了一个变量,该变量是每个数组的名称,但是当我检查数组的长度时,我意识到它们都是 5,因为 lenId = "para1" 是只是一个包含 5 个字母的字符串。我如何能够检查para1 以查看数组中有多少元素?或者有没有更好的方法来检查我所有的数组的长度,可能会将它们全部放入一个更大的数组或其他东西中?任何帮助将不胜感激

【问题讨论】:

标签: javascript arrays string for-loop


【解决方案1】:

将数组放入对象中:

//Initializing the object:
var O = {
  para1: ["NB4-CAXL-14U-12-"],
  para2: ["K"],
  para3: ["-270°C to 1372°C, –454°F to 2501°F"],
  para4: ['1/8"', '3/16"', '1/4"']
};

//Adding a new key to the object:
O.para5 = ['6"', '12"', '18"'];

//Getting the object's keys and their lengths:
for(var j in O) {
  console.log(j + ': ' + O[j].length);
}

//Accessing an individual array element:
console.log(O.para4[1]);   //3/16"

//Iterating through the object's array values using a for loop
for(var j in O) {
  for(var i = 0 ; i < O[j].length ; i++) {
    console.log(j + ': Element ' + i + ': Value ' + O[j][i]);
  }
}

//Iterating through the object's array values using forEach
for(var j in O) {
  O[j].forEach(function(val, i) {
    console.log(j + ': Element ' + i + ': Value ' + val);
  });
}

【讨论】:

  • 谢谢,效果很好。但是,如果在控制台中显示:VM39 extensions::schemaUtils:112Uncaught Error: Invocation of form runtime.connect(null, ) 与定义 runtime.connect(optional string extensionId, optional object connectInfo) 不匹配,这意味着什么?我的代码中唯一的另一件事是一个 for 循环,我已经使用了很长时间并且没有更改,所以我不知道是什么导致它..
  • 对不起,这对我来说是新的。您是否在扩展程序中运行它?
  • 我正在使用 Jsfiddle
  • 这很奇怪。我在 JSFiddle 中没有看到相同的效果:jsfiddle.net/s8m84c0u你使用的是什么浏览器?
  • @Rick Hitchcock,再次感谢您救命!我的问题是,在我的循环中,我从 j = 0 到 O 的长度,所以我的 j 是一个数字,这就是为什么我不能做 O[j][i],而你的 j 是实际的数组本身
【解决方案2】:

我会继续将您的数组放入一个数组中。然后,您可以更轻松地对该数组进行操作,而不必担心编号。该数字是基于索引隐含的!

var paras = [];
paras.push(["NB4-CAXL-14U-12-"]);
paras.push(["K"]);
paras.push(["-270°C to 1372°C, –454°F to 2501°F"]);
paras.push(['1/8"', '3/16"', '1/4"']);
paras.push(['6"', '12"', '18"']);

paras.forEach(function(para) {
    console.log(para.length);  
});

【讨论】:

    【解决方案3】:

    这并不漂亮,但看起来您将这些数组存储在全局范围(客户端)中,因此从技术上讲,您可以将每个变量称为 window 的属性:

    for (var j = 1; j < 10; j++) {
     var lenId = "para" + j;
     console.log(window[lenId].length);
    }
    

    【讨论】:

      【解决方案4】:

      如果数组不是动态生成的并且您像在示例中那样定义它们,那么更好的方法是使用标准数组方法filter。它接受该函数作为返回boolean 的参数并告知是否应过滤数组项。你想这样使用它:

      var para1 = ['1', '2', '3'];
      var para2 = ['1'];
      var para3 = ['1', '2'];
      
      var arraysToFilter = [para1, para2, para3];
      
      var filteredArray = arraysToFilter.filter(function (paraArray) {
      
          // returns true if array has more than one element;
          return paraArray.length > 1;
      });
      

      现在 filteredArray 将是一个包含两个元素的数组 - para1para3

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        相关资源
        最近更新 更多