TypeError:Array.prototype.unshift调用null或undefined

时间:2015-06-04 22:30:54

标签: javascript underscore.js

我无法弄清楚为什么我从这段代码中得到以下错误:

var xs = [1, 2, 3];
var ys = [];
_.each(xs, ys.unshift);
console.log(ys);

错误是:Uncaught TypeError: Array.prototype.unshift called on null or undefined

我使用的是underscore.js。我试过了

_.each(xs, _.bind(Array.prototype.unshift, xs));

但这导致了我根本没想到的东西:

[3, 2, Array[3], 2, 1, Array[3], 1, 0, Array[3]]

其中子数组实际上是我想要的:[1, 2, 3]

唯一有效的变体是:

_.each(xs, function (x) { ys.unshift(x); });

但是我想假装我正在使用一种函数式语言,只是将函数提供给each ......

请帮忙。我做错了什么?

1 个答案:

答案 0 :(得分:1)

有趣。 这是因为$ var='2015-06-03_18-05-30' $ echo $var | sed 's/\-\|\_//g' $ echo $var | sed 's/-|_//g' 使用_.each调用回调函数,该函数将此值绑定到数组:

value, key, arr

我不认为下划线有一个帮手,只有N个参数运行一个函数,无论你传递什么

所以,即使您正在寻找更清洁的版本,这也会有效:

_.each(xs, function (value, key, xs) {
  ys.unshift(value, key, xs);
});

实现可能如下所示:

_.each(xs, function (value, key, xs) {
  ys.unshift(value);
});