我有以下实现。
$("#movieClick").click(function(){
var theLink = "https://www.youtube.com/embed/Wp_K8prLfso?autoplay=1&rel=0";
document.getElementById("onscreen").src = theLink;
});
// really annoying to play in the Background...this disables the link
$("#movie").on('hidden.bs.modal', function (e) {
$("#movie iframe").attr("src", '');
});
结果应为Array.prototype.abc = function(condition, t){
var arr = [];
for( var i = 0; i < this.length; i++){
arr.push(condition(this[i],t));
}
return arr;
};
var a = [1,2,3,4];
var t = 2;
alert(a.abc( function(item,diviser){
if(item % diviser === 0) { return item; }
},t));
。相反,我得到[2,4]
。
我已尝试以下条件,但它始终返回上述结果。
[,2,,4]
这是我在做的时候
if(condition(this[i],t) !== false){ arr.push(condition(this[i],t)); }
if(item % diviser === 0) { return item; } else { return false; }
条件不适用于false
或'false'
或true
,或者对于我在其他部分返回的任何值都不起作用。在实际实现中,我没有'true'
部分。我知道我们可以使用else
或其他东西删除空白部分。但即使我没有回复任何原因,我也不明白。甚至在splice
之前使用if条件后它也不起作用。究竟发生了什么以及如何删除数组中的空白?
答案 0 :(得分:1)
您必须检查undefined
中返回的值是否为callBack
,
for( var i = 0; i < this.length; i++){
var x = condition(this[i],t);
if(typeof x !== "undefined") arr.push(x);
}
你做了两次不同的尝试来解决这个问题,但这会失败因为,
!== false
,您的callBack将返回一个数字或未定义。因此,严格的相等性将一直失败,并且由于操作数的类型不同,因此将被评估为false。
if(item % diviser === 0) { return item; } else { return false; }
当条件失败时,这将返回false,因此false
将被推送到数组中。并且它不会跳过推动部分。
答案 1 :(得分:0)
将cmondition移动到推动之外并将其放置在之前。条件应该只返回true或false。
condition(this[i],t) && arr.push(this[i]);
答案 2 :(得分:0)
这是因为无论condition
返回什么,你都在推动。
替换此
arr.push(condition(this[i],t));
与
var val = condition(this[i],t)
val = val !== false && arr.push(val);
由于您的condition
方法明确表示错误,因此您只需检查val !== false
样本
Array.prototype.abc = function(condition, t){
var arr = [];
for( var i = 0; i < this.length; i++){
var val = condition(this[i],t); console.log(val);
val !== false && arr.push(val);
}
return arr;
};
var a = [1,2,3,4];
var t = 2;
document.body.innerHTML += a.abc( function(item,diviser){
if(item % diviser === 0) { return item; } else { return false; }
},t);
&#13;