源地址

Extending the native Array prototype

Code

javascriptArray.prototype.clean = function(deleteValue) {
  for (var i = 0; i < this.length; i++) {
    if (this[i] == deleteValue) {         
      this.splice(i, 1);
      i--;
    }
  }
  return this;
};

Usage

javascripttest = new Array("","One","Two","", "Three","","Four").clean("");

test2 = [1,2,,3,,3,,,,,,4,,4,,5,,6,,,,];

test2.clean(undefined);

Pure Javascript

Description

You can simply push the existing elements into other array (the example removes every "falsy" value: undefined, null, 0, false, NaN and '').

Code

javascriptfunction cleanArray(actual){
  var newArray = new Array();
  for(var i = 0; i<actual.length; i++){
    if (actual[i]){
      newArray.push(actual[i]);
    }
  }
  return newArray;
}

Usage

javascriptvar result = cleanArray([1,2,,3,,3,,,,,,4,,4,,5,,6,,,,]);

Simple

Description

If you've got Javascript 1.6 or later you can use Array.filter using a trivial return true callback function.

Since .filter automatically skips missing elements in the original array.

The MDN page linked above also contains a nice error-checking version of filter that can be used in JavaScript interpreters that don't support the official version.

Note that this will not remove null entries nor entries with an explicit undefined value, but the OP specifically requested "missing" entries.

Code

javascriptarr = arr.filter(function() { 
  return true; 
});
javascriptarr = arr.filter(function(n) { 
  return n != undefined;
});
javascript// only for arrays items which are numbers is numbers strings
arr = arr.filter(Number)
javascript[1, false, "", undefined, 2].filter(Boolean); // [1, 2]
javascript// only for single array items of type text
['','1','2',3,,'4',,undefined,,,'5'].join('').split('');

JQuery

Code

javascriptarr = $.grep(arr, function(n){ 
  return n;
});

Underscope

Code

javascript_.filter([1, false, "", undefined, 2], Boolean); // [1, 2]
javascript_.compact([1, false, "", undefined, 2]); // [1, 2]

Cool Way

Description

Using ES6. IE support for filter is IE9 standards mode.

Code

javascriptvar arr  = [1,2,null, undefined,3,,3,,,0,,,4,,4,,5,,6,,,,];
var temp = [];

for(let i of arr) {
  // copy each non-empty value to the 'temp' array
  i && temp.push(i); 
}

arr = temp;
delete temp; // discard the variable

arr // [1, 2, 3, 3, 4, 4, 5, 6]

Iteration

Code

javascriptvar arr = [1,2,null, undefined,3,,3,,,0,,,[],,{},,5,,6,,,,];
var len = arr.length, i;

for(i = 0; i < len; i++ ) {
  // copy non-empty values to the end of the array
  arr[i] && arr.push(arr[i]);  
}

// cut the array and leave only the non-empty values
arr.splice(0 , len);  

arr // [1,2,3,3,[],Object{},5,6]

limichange
4.2k 声望74 粉丝

本人已经不再这里玩了,