Интересует функция JavaScript Map - PullRequest
0 голосов
/ 07 ноября 2018

Я изучаю эту функцию JS:

function solution (array, commands) {
     return commands.map (v => {
         return array.slice(v[0] -1, v[1]).sort((a, b) => a - b).slice(v[2] -1, v[2])[0];
     });
}

Я не знаю, что делает v[0] -1.

Если commands - это двумерный массив, подобный этому:

[[2,5,4] [4,4,1] [1,7,3]]

Что означает v[0] и что означает -1 для него, например v[0] -1?

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018

Развивая ответ Джека, я полагаю, что путаница ОП возникает из-за игнорирования влияния функции map, а именно:

  • Метод map() создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

Итак, рассматриваемая функция будет вызываться три раза: сначала с [2,5,4],, затем [4,4,1] и так далее. Итак, понимая это, фрагмент кода, как написано, теперь имеет смысл: v[0]-1 равен 1 в первый раз и т. Д.

  • Теперь, сказав все это: «Я ненавижу встречать подобный код», хотя, конечно, я сталкиваюсь с этим часто, как и все мы. Не только потому, что он хрупкий, но и потому, что он заставляет меня чувствовать, что я наткнулся на эпизод Name That Tune , где первоначальный программист пытается свести к минимуму нажатия клавиш без особой причины. Мне не нравится «ломать голову» над тем, как работает фрагмент исходного кода.
0 голосов
/ 07 ноября 2018

Если commands равно [[2,5,4],[4,4,1],[1,7,3]]

тогда в контексте commands.map( v => {}), v[0] не является массивом; это один из номеров. map() возьмет каждый вложенный массив и присвоит ему v, поэтому при доступе к v[0] вы получите первый элемент подмассива:

let commands=[[2,5,4],[4,4,1],[1,7,3]]
let m  = commands.map(v => {
    console.log("v[0]:", v[0])
    // we don't know what array is so not sure what to return
    //return array.slice(v[0] -1, v[1]).sort((a, b) => a - b).slice(v[2] -1, v[2])[0];
    return "some value"
});
0 голосов
/ 07 ноября 2018

Ваш код просто обращается к индексам каждого массива в пределах commands

[[2,5,4], [4,4,1], [1,7,3]].forEach(arrayV => console.log(arrayV));
.as-console-wrapper { max-height: 100% !important; top: 0; }

v[0] просто получает первый индекс каждого массива

[[2,5,4], [4,4,1], [1,7,3]].forEach(arrayV => console.log(arrayV[0]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

И, v[0] - 1 только вычитает 1 до первого значения в массиве v

[[2,5,4], [4,4,1], [1,7,3]].forEach(arrayV => console.log(arrayV[0] - 1));
.as-console-wrapper { max-height: 100% !important; top: 0; }

Функция Array.prototype.map() перебирает массив и передает каждый элемент обработчику. В вашем случае происходит передача массивов из каждого индекса.

0 голосов
/ 07 ноября 2018

Что это значит:

v[0]

Получает первый элемент из массива с именем v.

-1

Это занимает 1 от первого элемента в массиве v.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...