As I process an array, I want to see if I have any duplicate names in the array that I am processing. If I encounter a duplicate name, I only want to keep the one where the series contains “Trekker.” How can I do this?
For example, given the shows array below. My goal is to remove the first instance of Spock and keep the instance that contains the word, Trekker.
shows: [
{ name: ‘James T. Kirk’, series: ‘Star Trek’ },
{ name: ‘Spock’, series: ‘Star Trek’, ‘Star Trek: The Next Generation’ },
{ name: ‘Jean-Luc Picard’, series: ‘Star Trek: The Next Generation’ },
{ name: ‘Worf’, series: ‘Star Trek: The Next Generation’ },
{ name: ‘Spock’, series: ‘Star Trek’, ‘Star Trekker’ }
]
I’ve been able to get rid of duplicate names using the following filter method, however, due to the positioning index, it always gets rid of the one I want to keep.
$shows.filter((show, pos, a) => a.findIndex(item => item.name == a[pos].name) == pos)
In this example, I got all 5 instances of the array back.
$shows.filter((show, pos, a) => a.findIndex(item => item.name == a[pos].name) != pos
&& a[pos].series.contains(“Trekker”)
|| a.findIndex(item => item.name == a[pos].name) == pos)
I thought if I could get the count of the current name, then I could leverage the count value to incorporate in the filters above, however, I can’t figure out how to do that.
$shows.filter(show => show.name == “Spock”).length
$shows.filter((show, pos, a) => a.findIndex(item => item.name == a[pos].name) != pos
&& a[pos].series.contains(“Trekker”)
|| a.findIndex(item => item.name == a[pos].name) == pos && COUNT == 1)
I also tried using the array.prototype.findLastIndex, but either SnapLogic didn’t like it or maybe it’s a Java/Javascript version issue.
Please help. My Javascript skills, especially when using callbacks, sucks. And thank you.