Q:

Сортировка массива обьектов по свойству, с заданным порядком

Нужно отсортировать массив
var arr = [
   {string: "Велосипед"},
   {string: "Пылесос"},
   {string: "Телевизор"},
   {string: "Самолет"},
   {string: "..."},
];

// нужно получить такой порядок, 
// Самолет, Пылесос, Телевизор, Велосипед -> и далее все остальные элементы ( если они есть )
arr.sort(function(a, b){

    // сортировка должна быть по регулярке, потому как в конце строки может быть число

    // вот тут я запутался какие числа возвращать
    if(/Самолет(.*)/.test(a)) return 1
    if(/Пылесос(.*)/.test(a)) return 1
    if(/Телевизор(.*)/.test(a)) return 1
    if(/Велосипед(.*)/.test(a)) return 1
    return -1
})

Спасибо за варианты. Написал свой велосипед. В масссиве задающем сортировку можно использовать регулярки. Функция сортирует массивы и массивы обьектов.
function specSort(specArray, sortArray, key, reverse) {

    specArray = specArray.reverse();

    function findIndex(val) {
        for (var i = 0; i < specArray.length; i++) {
            if (typeof specArray[i] === RegExp) {
                if (specArray[i].test(val)) return i;
            } else {
                if (specArray[i] == val) return i;
            }
        }
        return -1
    }

    sortArray.sort(function (a, b) {
        if (key) {
            return findIndex(b[key]) - findIndex(a[key])
        } else {
            return findIndex(b) - findIndex(a)
        }
    })

    return reverse ? sortArray.reverse() : sortArray;
}

// простой массив, можно использовать регулярки и текст

const weights = [
    new RegExp('^телев(.*)$', 'i'),
    'Самолет',
    new RegExp('^велос(.*)$', 'i'),
    new RegExp('^пыл(.*)$', 'i'),
];

const elements = [
    'Велосипед',
    'Пылесос',
    'Телевизор',
    'Самолет',
    '...',
];

console.log(specSort(weights, elements));

// массив обьектов, можно использовать регулярки и текст

const weights2 = [
    new RegExp('^телев(.*)$', 'i'),
    'Самолет',
    new RegExp('^велос(.*)$', 'i'),
    new RegExp('^пыл(.*)$', 'i'),
];

const elements2 = [
    {string: 'Велосипед'},
    {string: 'Пылесос'},
    {string: 'Телевизор'},
    {string: 'Самолет'},
    {string: '...'},
];

console.log(specSort(weights2, elements2, "string"));

A:

Я так понимаю тут должен быть индивидуальный порядок сортировки, который задается в самом начале:

var arr = ["Ерундень","Велосипед15","Шляпа","Пылесос","Телевизор7","Самолет","..."];
var range = ["самолет","пылесос","телевизор","велосипед"]; //индивидуальный порядок по которому будет сортировать

arr = arr.sort(function(a, b){
  [a, b] = [a.toLowerCase().match(/[а-я]+/), b.toLowerCase().match(/[а-я]+/)]; //в нижний регистр, оставляем только буквы
  [a, b] = [a?a[0]:'-1', b?b[0]:'-1']; //страхуемся на случай, когда регулярка null
  var [i1, i2] = [range.indexOf(a), range.indexOf(b)]; //определяем вес элементов в соответствии с порядком сортировки
  [i1, i2] = [i1==-1?1000:i1, i2==-1?1000:i2]; //если вес определить не удалось, то даем наибольший вес
  return i1>i2?1:i1==i2?0:-1;
})
console.log(arr.join(', '));

