对此JavaScript Map函数感到好奇

时间:2018-11-06 23:28:08

标签: javascript jquery arrays object

我正在研究此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 :(得分:3)

您的代码只是访问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()遍历数组并将每个元素传递给处理程序。就您而言,是从每个索引传递数组。

答案 1 :(得分:2)

这是什么意思

v[0]

这将从名为v的数组中获取第一个元素。

-1

这与数组v中的第一个元素相距1。

答案 2 :(得分:2)

如果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"
});

答案 3 :(得分:1)

详细解释杰克的答案,我认为OP的困惑来自忽略map函数的影响,即:

  • map()方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

因此,有问题的函数将被调用三次:首先使用[2,5,4],,然后使用[4,4,1],依此类推。因此,意识到这一点,现在编写的代码段就很有意义:v[0]-1第一次等于1,依此类推。

  • 现在,我已经说了所有的话–“我讨厌遇到这样的代码”,尽管我当然会像我们所有人一样经常遇到它。不仅因为它很脆弱,而且还因为它让我觉得自己偶然发现了 Name That Tune 情节,原始程序员在没有特殊原因的情况下试图尽量减少击键。我不喜欢不得不“迷惑”一段源代码的工作原理。