【发布时间】:2015-09-22 17:58:19
【问题描述】:
我正在尝试减少对象内部的数组。我要回来了
push is not a function
我已经将我的数组作为空数组开始,并创建了一个添加函数作为第一个参数传入。
function add(a,b) {
return a +b;
}
var navBarArray = [];
var listArray = [];
var mapping = {
".navbar": navBarArray,
".list-group": listArray
};
我在映射对象上尝试了这种方法,但它会产生错误
var mapping = {
".navbar": Math.round(navBarArray.reduce(add,0) ),
".list-group": listArray
};
但是,我得到 push is not a function back in my console。
下面是我将值传递给数组的函数。我可以在函数内部创建一个变量并在那里减少它。但是,这会限制对我的变量的访问,并且会在我继续时使我的函数膨胀。
Object.keys(mapping).forEach(function(selector) {
$(selector).hover(function(evt) {
console.log('mapping',mapping);
console.log('selector',selector);
enteredTime = new Date();
}, function() {
var ctime = new Date();
var time = (ctime.getTime() - enteredTime.getTime())/1000;
mapping[selector].push(time);
// *********** this works but not where I need it to*******
var reduce = Math.round(navBarArray.reduce(add,0) );
console.log(reduce);
});
})
【问题讨论】:
-
也许
mapping[selector]是undefined...? -
哪一行出现错误?调用
reduce应该不会报关于push的错误。 -
也许确保
mapping[selector]是typeof"array"? -
reduce的结果在您的情况下不是数组。而且还不清楚你想要它实际上是什么。 -
第二个
var mapping = ...sn-p 将.navbar键的值设置为一个数字,但随后您尝试像使用mapping[selector].push(...)的数组一样使用它。我认为你只需要坚持mapping的第一个定义。
标签: javascript arrays scope reduce