JavaScript Program to Remove Empty Strings from Array Without Loop
Given an array with values and empty strings, our task is to remove empty strings from an array while keeping a record of the removed elements without using explicit loops.
Example:
Input: Array = ["hello", "", "world", "", "!", " "]; Output: Cleaned Array: [ 'hello', 'world', '!', ' ' ] Removed Elements: [ '', '' ]
Below are the approaches to remove empty strings from the array while keeping a record Without Loop in JavaScript:
Table of Content
Using reduce
In this approach, we use reduce
to
iterate through the array, accumulate non-empty strings in one array, and collect removed elements in another array.
Example: The below code example uses reduce
to remove empty strings from array
function removeEmptyStrings(arr) {
return arr
.reduce((acc, val) => {
if (val !== '') {
acc.cleanedArray.push(val);
} else {
acc.removedElements.push(val);
}
return acc;
}, { cleanedArray: [], removedElements: [] });
}
let inputArray = ["hello", "", "world", "", "!", " "];
let result = removeEmptyStrings(inputArray);
console.log("Cleaned Array:", result.cleanedArray);
console.log("Removed Elements:", result.removedElements);
Output
Cleaned Array: [ 'hello', 'world', '!', ' ' ] Removed Elements: [ '', '' ]
Time complexity: O(n)
Auxiliary Space: O(n)
Using filter
In this approach we use filter
to create a cleaned array of non-empty strings and another filter to create an array of empty strings.
Example: The below code example is a practical implementation to remove empty strings from array using filter with map.
function removeStrings(arr)
{
const cleanedArray = arr
.filter(val => val !== '');
const removedElements = arr
.filter(val => val === '');
return { cleanedArray, removedElements };
}
let inputArray2 = ["hello", "", "world", "", "!", " "];
let result2 = removeStrings(inputArray2);
console.log("Cleaned Array:", result2.cleanedArray);
console.log("Removed Elements:", result2.removedElements);
Output
Cleaned Array: [ 'hello', 'world', '!', ' ' ] Removed Elements: [ '', '' ]
Time Complexity: O(n)
Auxiliary Space: O(n)
Using flatMap
In this approach, we use flatMap
to create a combined operation of filtering and mapping, where we can conditionally return values or empty arrays, effectively achieving the desired result.
Example: The below code example uses flatMap
to remove empty strings from the array:
function removeEmptyStringsFlatMap(arr) {
const cleanedArray = arr.flatMap(val => val !== '' ? [val] : []);
const removedElements = arr.flatMap(val => val === '' ? [val] : []);
return { cleanedArray, removedElements };
}
let inputArray3 = ["hello", "", "world", "", "!", " "];
let result3 = removeEmptyStringsFlatMap(inputArray3);
console.log("Cleaned Array:", result3.cleanedArray);
console.log("Removed Elements:", result3.removedElements);
Output
Cleaned Array: [ 'hello', 'world', '!', ' ' ] Removed Elements: [ '', '' ]
Time Complexity: O(n)
Auxiliary Space: O(n)
Using Array.prototype.partition
The partition method is not a built-in JavaScript method but can be implemented as a custom utility function. This method can split an array into two arrays based on a predicate function, separating elements that satisfy the predicate from those that don't. Here, we'll use it to separate non-empty strings from empty strings.
Example:
// Custom partition function
function partition(array, predicate) {
return array.reduce(
([pass, fail], elem) => predicate(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]],
[[], []]
);
}
// Usage
const array = ["hello", "", "world", "", "!", " "];
const [cleanedArray, removedElements] = partition(array, elem => elem !== "");
console.log("Cleaned Array:", cleanedArray); // Output: [ 'hello', 'world', '!', ' ' ]
console.log("Removed Elements:", removedElements); // Output: [ '', '' ]
Output
Cleaned Array: [ 'hello', 'world', '!', ' ' ] Removed Elements: [ '', '' ]