Задачка с сортировкой массива

287
12 января 2017, 07:11

Есть такой массив объектов

var array = [
    {big: true, id="0"},
    {big: false, id="1"},
    {big: false, id="2"},
    {big: true, id="3"},
    {big: false, id="4"},
    {big: false, id="5"},
    {big: true, id="6"},
    {big: false, id="7"},
    {big: false, id="8"},
    {big: false, id="9"},
    {big: false, id="10"},
    {big: false, id="11"},
    {big: true, id="12"},
    {big: true, id="13"},
    {big: true, id="14"}
];

Нужно отсортировать его так чтобы объекты с big: true были в отдельном массиве, а объекты с big: false были в массиве по четыре ( если встречается объект с big: false, то искать после него ещё три таких объекта и добавлять в массив ).

На выходе нужно иметь такой многомерный массив:

[
  [{
    big: true,
    id = "0"
  }],
  [{
    big: false,
    id = "1"
  }, {
    big: false,
    id = "2"
  }, {
    big: false,
    id = "4"
  }, {
    big: false,
    id = "5"
  }],
  [{
    big: true,
    id = "3"
  }],
  [{
    big: true,
    id = "6"
  }],
  [{
    big: false,
    id = "7"
  }, {
    big: false,
    id = "8"
  }, {
    big: false,
    id = "9"
  }, {
    big: false,
    id = "10"
  }],
  [{
    big: false,
    id = "11"
  }],
  [{
    big: true,
    id = "12"
  }],
  [{
    big: true,
    id = "13"
  }],
  [{
    big: true,
    id = "14"
  }]
]
Answer 1

Перенес из чата совместное творчество.

var array = [ 
    {big: true, id: "0"}, 
    {big: false, id: "1"}, 
    {big: false, id: "2"}, 
    {big: true, id: "3"}, 
    {big: false, id: "4"}, 
    {big: false, id: "5"}, 
    {big: true, id: "6"}, 
    {big: false, id: "7"}, 
    {big: false, id: "8"}, 
    {big: false, id: "9"}, 
    {big: false, id: "10"}, 
    {big: false, id: "11"}, 
    {big: true, id: "12"}, 
    {big: true, id: "13"}, 
    {big: true, id: "14"} 
]; 
 
var result = []; 
var falseArray = null; 
for(var i = 0; i < array.length; i++){ 
  if (array[i].big) { 
    result.push([array[i]]); 
  } else { 
    if (falseArray == null || falseArray.length == 4) { 
      result.push(falseArray = [array[i]]); 
    } else { 
      falseArray.push(array[i]); 
    } 
  } 
} 
console.log(result);

Answer 2

var array = [ 
    {big: true, id: "0"}, 
    {big: false, id: "1"}, 
    {big: false, id: "2"}, 
    {big: true, id: "3"}, 
    {big: false, id: "4"}, 
    {big: false, id: "5"}, 
    {big: true, id: "6"}, 
    {big: false, id: "7"}, 
    {big: false, id: "8"}, 
    {big: false, id: "9"}, 
    {big: false, id: "10"}, 
    {big: false, id: "11"}, 
    {big: true, id: "12"}, 
    {big: true, id: "13"}, 
    {big: true, id: "14"} 
]; 
 
var res = []; 
var falseArr = []; 
for (var i = 0; i < array.length; i++) { 
  var obj = array[i]; 
  if (obj.big) 
    res.push(obj); 
  else { 
    falseArr.push(obj); 
    if (falseArr.length == 4) { 
      res.push(falseArr); 
      falseArr  = []; 
    } 
  } 
} 
if (falseArr.length > 0) 
  res.push(falseArr); 
 
console.log(JSON.stringify(res));

READ ALSO
Как вставить элемент из переменной

Как вставить элемент из переменной

В переменной b хранится клон объекта span и вместо того чтобы вставился элемент Текст вставляется вот это [object Object]

332
Обратный transition-эффект при ховере до тех пор, пока анимация не закончится

Обратный transition-эффект при ховере до тех пор, пока анимация не закончится

Хотел придумать так, чтобы сделать анимацию при ховере выполняющейся до тех пор, пока сама анимация закончитсяТо есть если подносить мышку...

338
Cordova. Крос доменный запрос не работает

Cordova. Крос доменный запрос не работает

Пытаюсь собрать приложение на CordovaВсе хорошо

423
jQuery перебор DOM элементов

jQuery перебор DOM элементов

Приветствую всехЕсть html примерно такой структуры:

323