如何删除javascript数组中的空白元素?

时间:2016-04-14 10:26:08

标签: javascript arrays prototype

我有以下实现。

$("#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条件后它也不起作用。究竟发生了什么以及如何删除数组中的空白?

3 个答案:

答案 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);         
}

你做了两次不同的尝试来解决这个问题,但这会失败因为,

  1. !== false,您的callBack将返回一个数字或未定义。因此,严格的相等性将一直失败,并且由于操作数的类型不同,因此将被评估为false。

  2. 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

样本

&#13;
&#13;
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;
&#13;
&#13;