#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)