在chrome中使用lodash(截至今日)。
_.map("0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0".split(":"), parseInt);
我得到:
[0, NaN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
似乎是一项基本操作。
答案 0 :(得分:4)
如果您已经在使用Lodash,那么将原生方法替换为Lodash通常会更安全。
在这种情况下,我会使用_.parseInt
而不是parseInt
,因为后者可能会产生意想不到的结果(就像这里的情况一样)。
以下按预期方式工作:
_.map("0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0".split(":"), _.parseInt);
如果您对为什么'vanilla'parseInt
方法返回NaN
感到好奇,我相信发生的事情如下:
_.map(collection, iteratee)
时,iteratee
实际上是通过三个参数调用的:(item, index, collection)
。来源here。parseInt
时,第二个参数是一个基数,它确定应该使用哪个基数来解析整数(二进制,八进制,十进制,十六进制等)。因为使用三个参数调用iteratee,这会弄乱你的基数并返回NaN
。有关parseInt
如何运作的解释,请参阅here。_.parseInt()
通过添加guard来避免此问题。通常可以安全地假设Lodash使用这样的警卫保护其方法,以确保您可以将它们用作其他Lodash方法中的迭代器。答案 1 :(得分:1)
正如我在post中所评论的那样,您可以通过这种方式解决问题:
console.log(("0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0").split(":").map(Number));