JSFiddle - React, Tailwind, and code Playground

JavaScript

var original = [{
    type: 'image',
    name: 'foo image',
    src: 'http://www.something.com/path/to/image.jpg',
    text: "lorem ipsum sit amet"
}, {
    type: 'video',
    name: 'foo video',
    src: 'http://www.something.com/path/to/video.mp4',
    text: "lorem ipsum sit amet"
}, {
    type: 'text',
    name: 'foo text',
    src: '',
    text: "lorem ipsum sit amet"
}, {
    type: 'video',
    name: 'foo video',
    src: 'http://www.something.com/path/to/video.mp4',
    text: "lorem ipsum sit amet"
}, {
    type: 'text',
    name: 'foo text',
    src: '',
    text: "lorem ipsum sit amet"
}, {
    type: 'image',
    name: 'foo image',
    src: 'http://www.something.com/path/to/image.jpg',
    text: "lorem ipsum sit amet"
}, {
    type: 'text',
    name: 'foo text',
    src: '',
    text: "lorem ipsum sit amet"
}, {
    type: 'video',
    name: 'foo video',
    src: 'http://www.something.com/path/to/video.mp4',
    text: "lorem ipsum sit amet"
}, {
    type: 'text',
    name: 'foo text',
    src: '',
    text: "lorem ipsum sit amet"
}];

// agrupar por chaves
var tipos = original.reduce(function(obj, entrada) {
    if (!obj[entrada.type]) obj[entrada.type] = [];
    obj[entrada.type].push(entrada);
    return obj;
}, {});
// intercalar
var resultado = Object.keys(tipos).reduce(function(arr, tipo, i, _tipos){
	let entrada, pos = 0 + i, qtd = _tipos.length;
	while (entrada = tipos[tipo].shift()){
		arr[pos] = entrada || null;
		pos+= qtd;
	}
	return arr;
}, []).filter(Boolean);
alert(JSON.stringify(resultado, null, 4))