Remove items from an array in order until matching item is found
I have an array of items
const test = [
{
id: '1',
},
{
id: 'a',
},
{
id: '3',
},
{
id: 'b',
},
{
id: '5',
},
{
id: 'c',
},
{
id: '7',
},
];
These objects are always going to be in the same order. I'd like to be able to remove all items in order from the start until a specific id
is reached.
I thought I could do this by just looping through until one is found and then pushing the items coming after that to a separate array:
let skippedArray = []
let skipUntilIndex = undefined
test.forEach((item, i) => {
if(item.id === 'b') {
skipUntilIndex = i
}
if(skipUntilIndex && i >= skipUntilIndex) {
skippedArray.push(item)
}
})
// [
// {
// id: 'b',
// },
// {
// id: '5',
// },
// {
// id: 'c',
// },
// {
// id: '7',
// },
// ]
console.log(skippedArray)
But this seems pretty dirty. Is there a better way to achieve this? I don't mind using lodash or similar libraries.
Solution 1:
You can do it by using findIndex and slice methods, by findIndex
you can find the index of target item in the array and with slice
you can make a subArray of your original Array.
const data = [ { id: '1', }, { id: 'a', }, { id: '3', }, { id: 'b', }, { id: '5', }, { id: 'c', }, { id: '7', }, ];
const getSkippedItems = (id)=> {
const index = data.findIndex(v => v.id == id);
return index > -1 ? data.slice(index) : [];
}
const skippedArr = getSkippedItems('b');
console.log(skippedArr)