【问题标题】:Parsing array based on a range and selected index values基于范围和选定的索引值解析数组
【发布时间】:2021-05-20 00:01:03
【问题描述】:

我有一个嵌套数组,其中包含长度为 6 的子数组和字符串值。我还有 2 个具有以下浮点值的变量:

var test_array =[["06101123", "0", "0.2", "34011", "Cumberland", "Local", "Fernwood Avenue"],
  ["02271163", "0.1", "0.22", "34003", "Bergen", "Local", "Fernwood Avenue"],
  ["04351186", "0.3", "0.59", "34007", "Camden", "Local", "Fernwood Avenue"],
  ["07131150", "0", "0.3", "34013", "Essex", "Local", "Beacon Street"],
  ["03041026", "0", "0.13", "34005", "Burlington", "Local", "Beacon Street"],
  ["20121109", "0.18", "0.43", "34039", "Union", "Local", "Jones Lane"],
  ["15141139", "0", "0.27", "34029", "Ocean", "Local", "Jones Lane"]];

var pt_one = 0.1; var pt_two = 0.59; var street = "Fernwood Avenue";

我想使用 pt_one 和 pt_two 作为低高范围。我想遍历子数组并创建一个新数组,其中 subarray[1] 等于或大于 pt_one 并且 subarray[2] 小于或等于 pt_two 并且 subarray[6] = street 并将该数组推送到 new_array .例如,这种情况下的输出将是:

 new_array =[["02271163", "0.1", "0.22", "34003", "Bergen", "Local", "Fernwood Avenue"],
  ["04351186", "0.3", "0.59", "34007", "Camden", "Local", "Fernwood Avenue"]];

我怎样才能做到这一点?

【问题讨论】:

    标签: javascript arrays parsing filter


    【解决方案1】:

    使用filter,这也检查type街道上的比较和大小写/空白问题。

    var test_array = [
      ["06101123", "0", "0.2", "34011", "Cumberland", "Local", "Fernwood Avenue"],
      ["02271163", "0.1", "0.22", "34003", "Bergen", "Local", "Fernwood Avenue"],
      ["04351186", "0.3", "0.59", "34007", "Camden", "Local", "Fernwood Avenue"],
      ["07131150", "0", "0.3", "34013", "Essex", "Local", "Beacon Street"],
      ["03041026", "0", "0.13", "34005", "Burlington", "Local", "Beacon Street"],
      ["20121109", "0.18", "0.43", "34039", "Union", "Local", "Jones Lane"],
      ["15141139", "0", "0.27", "34029", "Ocean", "Local", "Jones Lane"]
    ];
    
    
    
    function findIt(low, high, street) {
      return test_array.filter(el =>
        +el[1] >= low && +el[2] <= high && el[6].trim().toLowerCase() === street.trim().toLowerCase());
    }
    
    
    var pt_one = 0.1;
    var pt_two = 0.59;
    var street = "Fernwood Avenue";
    
    console.log(findIt(pt_one, pt_two, street))

    【讨论】:

    • 两个优秀的解决方案。我喜欢这样修剪街道名称并设置为小写。我不明白的一件事(尽管解决方案有效)是低值和高值是数字,而 test_array[1] 和 [2] 是字符串值。我实际上在代码中使用 parseFlot(test_array[1]) ... 运行它并失败了,但是完全按照上面的方式使用它,没有问题。
    【解决方案2】:

    这是一个基本的 filter() 操作,您可以在其中检查每个条件

    var pt_one = 0.1; var pt_two = 0.59; var street = "Fernwood Avenue";
    
    var test_array =[["06101123", "0", "0.2", "34011", "Cumberland", "Local", "Fernwood Avenue"],
      ["02271163", "0.1", "0.22", "34003", "Bergen", "Local", "Fernwood Avenue"],
      ["04351186", "0.3", "0.59", "34007", "Camden", "Local", "Fernwood Avenue"],
      ["07131150", "0", "0.3", "34013", "Essex", "Local", "Beacon Street"],
      ["03041026", "0", "0.13", "34005", "Burlington", "Local", "Beacon Street"],
      ["20121109", "0.18", "0.43", "34039", "Union", "Local", "Jones Lane"],
      ["15141139", "0", "0.27", "34029", "Ocean", "Local", "Jones Lane"]];
      
    const res = test_array.filter(arr=>{
       return arr[6] === street && arr[1] >= pt_one && arr[2] <= pt_two;
    });
    
    console.log(res)

    【讨论】:

      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2018-05-29
      • 2021-05-24
      相关资源
      最近更新 更多