Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

159
Views
Split array based on element contents?

Let's say my elements look like this:

const words = [
 'duck foo bar',
 'duck',
 'duck bing ',
 'bing',
 'Bloop#12 goose',
 'duck 12',
 'duck goose',
  ...
]

What I'd like is to split this into chunks where 'goose' is the final element in a chunk:

const words = [
 [
   'duck foo bar',
   'duck',
   'duck bing',
   'bing',
   'Bloop#12 goose',
 ], 
 [
   'duck 12',
   'duck goose',
 ], 
 [
  ...
 ],
];

There's no regularity to how many elements precede a 'goose', nor what is in each element except that 1) goose is always the last part of an element, and 2) goose never appears in any other element besides the one I want a chunk to end on (i.e. I never get 'goose foo', but I might get 'duck goose')

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

You could reduce the array and have a look to the previous string and add an array to the result set for a new group.

const
    words = ['duck foo bar', 'duck', 'duck bing ', 'bing', 'Bloop#12 goose', 'duck 12', 'duck goose'],
    separator = 'goose',
    groups = words.reduce((r, s, i, a) => {
        if (!i || a[i - 1].includes(separator)) r.push([]);
        r[r.length - 1].push(s);
        return r;
    }, []);

console.log(groups);
.as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Report

0

Try this. This should do what you're looking for.

const words = [
 'duck foo bar',
 'duck',
 'duck bing ',
 'bing',
 'Bloop#12 goose',
 'duck 12',
 'duck goose'
]

const answer = []
let temp = []
for(let i = 0; i < words.length; i++){
  if(words[i].includes('goose')){
    temp.push(words[i])
    answer.push(temp)
    temp = []
  } else{
    temp.push(words[i])
  }
}

console.log(answer)

about 4 years ago · Juan Pablo Isaza Report

0

You can achieve this with a simple forEach loop. In my example below I store the values first temporally.

Then I push the chunk into the new array if the word contains goose.

const words = [
 'duck foo bar',
 'duck',
 'duck bing ',
 'bing',
 'Bloop#12 goose',
 'duck 12',
 'duck goose',
 'abc'
]

const n = []
let tmp = [];
words.forEach((w) => {
  if (! w.includes('goose')) {
    tmp.push(w);
  } else {
    tmp.push(w);
    n.push(tmp);
    tmp = [];
  } 
  
});

console.log(n)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!