I have an array of elements. I also have an IndexSet that specifies which indices of the array need to be extracted into a new array. E.g.:
let array = ["sun", "moon", "star", "meteor"]
let indexSet: IndexSet = [2, 3]
// Some magic happens here to get:
let result = ["star", "meteor"]
I'm looking to use the swift filter
function, but haven't got the answer yet. How can I do this?
Here's the syntax for Array Filter: const returnValue = array. filter((value, index, array) => {...}, thisArg); Our returnValue will contain our new array of filtered return values.
One can use filter() function in JavaScript to filter the object array based on attributes. The filter() function will return a new array containing all the array elements that pass the given condition. If no elements pass the condition it returns an empty array.
You can use the Object. keys() function to convert the object's keys into an array, and accumulate the filtered keys into a new object using the reduce() function as shown below. const obj = { firstName: 'Jean-Luc', lastName: 'Picard', age: 59 }; // { firstName: 'Jean-Luc', lastName: 'Picard' } Object.
IndexSet
is a collection of increasing integers, therefore you can
map each index to the corresponding array element:
let array = ["sun", "moon", "star", "meteor"]
let indexSet: IndexSet = [2, 3]
let result = indexSet.map { array[$0] } // Magic happening here!
print(result) // ["star", "meteor"]
This assumes that all indices are valid for the given array. If that is not guaranteed then you can filter the indices (as @dfri correctly remarked):
let result = indexSet.filteredIndexSet { $0 < array.count }.map { array[$0] }
You can use enumerated
, filter
and map
like this
let result = array
.enumerated()
.filter { indexSet.contains($0.offset) }
.map { $0.element }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With