Remove null values from javascript array
I am having a javascri开发者_如何学编程pt array.
addresses = new Array(document.client.cli_Build.value,
document.client.cli_Address.value,
document.client.cli_City.value,
document.client.cli_State.value,
document.client.cli_Postcode.value,
document.client.cli_Country.value);
document.client.cli_PostalAddress.value = addresses.join(", ");
I have to copy the content of all these array value to the postal address textarea. when i use the above join function, comma has been added for null values. How to remove this extra commas?
Thanks
You can use filter
to filter out the null values:
addresses.filter(function(val) { return val !== null; }).join(", ")
Use filter
method to remove all falsy values:
var list = [null, undefined, 0, 1, 2, '', 'test'];
// ES5:
var result = list.filter(Boolean).join(', ');
console.log(result);
// ES6, saves 3 characters:
var result = list.filter(x => x).join(', ');
console.log(result);
Another filter alternative
myArray.filter(function(val){if(val)return val}).join(", ")
document.write(['this','','',,,,'is','a',,,'test'].filter(function(val){if(val)return val}).join(", "));
Underscore is a nice utility library for functional programming and list manipulation:
_.filter(addresses, function(val) { return val !== null; }).join(", ");
Edit: And there is a more compact way (Thanks Andrew De Andrade!):
_.compact(addresses).join(", ");
document.client.cli_PostalAddress.value =
document.client.cli_PostalAddress.value.replace(/(, )+/g,", ");
Or should it be
document.client.cli_PostalAddress.value =
document.client.cli_PostalAddress.value
.replace(/(null, )/g,"").replace(/(, null)/g,"");
??
One could also use Array.prototype.reduce().
It reduces an array to a single value, e.g. a string. Like so:
addresses.reduce(function (a, b) {
if (a && b) { return a + ', ' + b; }
if (a) { return a; }
return b;
}, '');
a
holds the intermediate result,
b
holds the current element.
If you would like to eliminate all the undefined, null, NaN, "", 0, a simple way to do it is to use a combination of filter call back function and boolean function.
var filterArr=arr.filter(function(val){
return Boolean(val);
});
When you pass a value to the boolean function, if the value is omitted or is 0, -0, null, false, NaN, undefined, or the empty string (""), the object has an initial value of false.
Here is an example of this usage:
function bouncer(arr) {
var filterArr=arr.filter(function(val){
return Boolean(val);
});
return filterArr;
}
Here are some tests:
bouncer([1, null, NaN, 2, undefined]);//should return [1, 2]
bouncer([7, "ate", "", false, 9]);// should return [7, "ate", 9]
bouncer(["a", "b", "c"]);// should return ["a", "b", "c"]
bouncer([false, null, 0, NaN, undefined, ""]);//should return []
Use the following code to remove the null
values only, its short & simple:
addresses = addresses.filter(n => (n===null) ? false : true).join(', ');
document.client.cli_PostalAddress.value = addresses;
If you want to remove null
, 0
, false
& ""
(Empty String) like values, then use this:
document.client.cli_PostalAddress.value = addresses.filter(Boolean).join(', ');
addresses.filter(Boolean).join(", ")
精彩评论