使用拼接在javascript中映射函数

时间:2014-11-18 20:59:26

标签: javascript

任何人都可以解释一下,当我们通过[0,1]

时,此函数如何返回2,0,1
function processData(input) {
   var parse_fun = function (s) { return parseInt(s, 10); };    
   var lines = input.split('\n');
    console.log(lines)
   var T = parse_fun(lines.shift());
    console.log(T)
    var data = lines.splice(0, T).map(parse_fun);
    console.log(data);    
}

令这条线混淆的部分。

var data = lines.splice(0, T).map(parse_fun);
console.log(data);

lines.splice(0,T)返回给我[]然后[].map(parse_fun)如何返回[0,1]

2 个答案:

答案 0 :(得分:1)

假设输入"2\n0\n1"

考虑lines.shift()的作用,

  • 删除lines中的第一项,并按1
  • 减少所有其他指标
  • 返回现已删除的第一个项目lines

因此,在您的情况下,系统会返回2lines会变为["0", "1"]

接下来,考虑lines.splice(0, 2)做什么

  • 2开始,从lines删除0个项目
  • 返回已删除项目的数组

因此,在您的情况下,系统会返回["0", "1"]lines会变为[]

最后,您将数组["0", "1"]映射到基数10并获得结果[0, 1]

答案 1 :(得分:1)

  

lines.splice(0,T)返回[]

不,它没有。它会产生["0", "1"]。但是splice也会从lines数组中删除这些项,这意味着如果你调用它两次(例如一次映射,一次调试),第二次尝试将返回空数组。您应该考虑使用slice代替。