Аналог ВПР(excel) в JS
Добрый вечер!
Не могу в интернете найти аналог функции ВПР в Excel, необходимо вернуть значение после поиска внутри массива. Прошу помочь с кодом, как это возможно реализовать: Что ищем: x = "Бразилия" Массив, где ищем(синтаксис можно менять): Аргентина;/argentina.png Бразилия;/brasil.png Германия;/germany.jpg Должно вернуться /brasil.png |
В JS это может быть и объект:
var country = { "Аргентина": "/argentina.png", "Бразилия": "/brasil.png", "Германия": "/germany.jpg" } тогда country[x] вернет /brasil.png. Если передать в JS как показано, то можно искать и рег. выражением. Так что сначала определите что ему будет передано, а затем можно определиться с поиском. |
nikofedorov,
:-? const obj = { "Аргентина" : "argentina.png", "Бразилия" : "brasil.png", "Германия" : "germany.jpg"}; let x = "Бразилия"; let y = obj[x]; alert(y); |
Это смотря как интерпретировать таблицы exel в Javascript
В exel лист имеет строки от 1 до n и столбцы от A до ... Однако, дпускается и числовое обозначение столбцов от 1 до n В этом случае в javascript таблицу можно представить так двумерный массив const list =[ [value11, value12, value13,....], [value21, value22, value23,....], ....... [valuen1, valuen2, valuen3,....], ]; Но сама таблица на листе задается хитро - это прямогольник от строки nrb до строки nre и от столбца ncb и до столбца nce Функция ВПР (VLOOKUP) имеет вид ВПР (знач, табл, столб, интерв) знач - то значение, которое ищем в первом столбце таблицы столб - номер столбца из которого мы должны взять значение параметр интерв - если true, может быть найдено не точное, а ближайшее значение, а если false, то ищется точное значение function VLOOKUP (value, [list, trb, tcb, tre, tce], colmn, interv = true) { // Параметр tabl задается как массив // list - лист exel // trb - начальная строка таблицы в листе // tcb - начальная колонка таблицы в листе // tre - конечная строка таблицы в листе // tce - конечная колонк таблицы в листе trb--; tcb--; tre--; tce--; colmn --; if (typeof value != 'number') interv = false; let findr; if (interv) { let delt = Infinity; findr = -1; for (let i = trb; i<= tre; i++) { if (Math.abs(value - list[i][tcb]) < delt) { delt = Math.abs(value - list[i][tcb]); findr = i; } } } else { findr = -1 for (let i = trb; i<= tre; i++) { if (value == list[i][tcb]) { findr = i; break; } } } return findr == -1 ? undefined : list[findr][tcb+colmn]; } const list1 = [ [0,0,0,0,0], [0,'Аргентина','argentina.png', 0,0], [0,'Бразилия','brasil.png', 0,0], [0,'Германия','germany.jpg', 0,0], [0,0,0,0,0] ] const img = VLOOKUP('Бразилия', [list1, 2,2,4,3], 2, false) alert (img) |
Часовой пояс GMT +3, время: 20:48. |