Если вы просто заботитесь о политике наверху, уменьшите массив в массив с политикой (1-й) и один без, а затем объедините их:
const impacts = [{ impactAreas: [{ name: "development" }, { name: "education" }] }, { impactAreas: [{ name: "education" }] }, { impactAreas: [{ name: "development" }, { name: "politics" }] }, { impactAreas: [{ name: "politics" }, { name: "education" }] }];
const hasPolitics = ({ impactAreas }) =>
impactAreas.some(({ name }) => name === 'politics');
const result = [].concat(...impacts.reduce((r, o) => {
r[hasPolitics(o) ? 0 : 1].push(o);
return r;
}, [[], []]));
console.log(result);
Если вам не нужно сохранять исходный порядок, вы можете добавить элементы, имеющие политику, в начало накопителя уменьшения:
const impacts = [{ impactAreas: [{ name: "development" }, { name: "education" }] }, { impactAreas: [{ name: "education" }] }, { impactAreas: [{ name: "development" }, { name: "politics" }] }, { impactAreas: [{ name: "politics" }, { name: "education" }] }];
const hasPolitics = ({ impactAreas }) =>
impactAreas.some(({ name }) => name === 'politics');
const result = impacts.reduce((r, o) =>
hasPolitics(o) ? [o, ...r] : [...r, o]
, []);
console.log(result);