2016-02-07 8 views
0

Я не очень хорошо разбираюсь в массиве и никогда не был. Так что это, наверное, простой и глупый вопрос, но здесь идет:Реорганизация каждого элемента третьего массива

У меня есть массив объектов. Каждый объект выглядит следующим образом:

obj = { color: "blue", name: "Some description", id: 1 }

В настоящее время она устроена следующим образом:

[Blue, Blue, Beige, Beige, Cyan, Cyan]

Что мне нужно сделать, это отсортировать этот массив, основанный на color свойство объекта к внешности например:

[Blue, Beige, Cyan, Blue, Beige, Cyan]

Спасибо :)

+0

пожалуйста добавьте некоторые данные и код, который вы пытались решить эту проблему. –

+0

дубликат - это не то, что нужно оператору. –

+0

Да, я не уверен, как это дублируется? Мне нужно, чтобы элементы чередуются 1,2,3,1,2,3 – kernelpanic

ответ

1

Извините, во-первых, я неправильно понял вопрос.

Вот мое решение обновлено:

'use strict'; 

let _ = require('lodash'); 

let colors = [ 
    {color: "Blue", id: 1}, 
    {color: "Blue", id: 2}, 
    {color: "Beige", id: 3}, 
    {color: "Beige", id: 4}, 
    {color: "Cyan", id: 5}, 
    {color: "Cyan", id: 6}, 
]; 

let sort = function(array) { 
    let order = ["Blue", "Beige", "Cyan"]; 
    let ordered = []; 
    let nextColor = 0; 

    do { 
     let itemIndex = _.findIndex(array, function(item) { 
      return item.color == order[nextColor]; 
     }); 
     let item = _.pullAt(array, itemIndex); 
     ordered.push(item.pop()); 

     nextColor++; 
     if(nextColor == array.length) { 
      nextColor = 0; 
     } 
    } while (array.length) 

    return ordered; 
} 

colors = sort(colors); 

console.log(colors); 

/* 
Result: 
[ { color: 'Blue', id: 1 }, 
    { color: 'Beige', id: 3 }, 
    { color: 'Cyan', id: 5 }, 
    { color: 'Blue', id: 2 }, 
    { color: 'Beige', id: 4 }, 
    { color: 'Cyan', id: 6 } ] 
*/ 
+0

Спасибо! Это сработало – kernelpanic

Смежные вопросы