Анализ массива на основе диапазона и выбранных значений индекса

#javascript #arrays #parsing #filter

Вопрос:

У меня есть вложенный массив, содержащий подмассивы длиной 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;
улица вар = «Фернвуд-авеню»;

Я хочу использовать pt_one и pt_two в качестве диапазона низкого и высокого. Я хочу перебрать подмассивы и создать новый массив, в котором подмассив[1] равен или больше, чем pt_one, а подмассив[2] меньше или равен pt_two, а подмассив[6] = улица, и переместить этот массив в новый массив. Например, результатом в этом сценарии будет:

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

Как я могу этого достичь?

Ответ №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 amp;amp;  el[2] <= high amp;amp; 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)) 

Комментарии:

1. Оба превосходных решения. Мне нравится, что это обрезает название улицы и устанавливает нижний регистр. Одна вещь, которую я не понимаю (несмотря на то, что решение работает), заключается в том, что низкие и высокие значения являются числами, а test_array[1] и [2] являются строковыми значениями. На самом деле я запустил его с помощью parseFlot(test_array[1]) … в коде и это не удалось, но при использовании его точно так, как описано выше, проблем не возникло.

Ответ №2:

Это базовая операция фильтра (), в которой вы проверяете каждое из условий

 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 amp;amp; arr[1] >= pt_one amp;amp; arr[2] <= pt_two;
});

console.log(res)