2015-05-28 3 views
0

я осуществил следующиеобъектов Группировка Javascript и вставки пользовательских значение

https://jsfiddle.net/f3syta4f/2/

function indexByColor (input) { 
    var output = {}; 
    for (var i in input) { 
     for (var j in input[i]) { 
      var x = input[i][j]; 
      if (output[x.color] === undefined) output[x.color] = { 
       color: x.color, 
       weight: [], 
      }; 
      output[x.color].weight.push(x.weight); 
     }; 
    }; 
    return Object.keys(output).map(function(c){ 
      return output[c]; 
    });  
}; 

Вход

dataSet[0]= [ 
    {color:"yellow",weight:12,key:0} 
    ,{color:"red",weight:15,key,0} 
];   
dataSet[1]= [ 
    {color:"yellow",weight:22,key:1} 
    ,{color:"blue",weight:10,key:1} 
]; 

Выходной ток

an[0]=[{color:"yellow",weight:[12,22]}] 
an[1]=[{color:"red",weight:[15]}] 
an[2]=[{color:"blue",weight:[10]}] 

Однако, если данные не существуют в этом массиве объектов javascript, добавьте в него 0.

Желаемая Выход

an[0]=[{color:"yellow",weight:[12,22]}] 
an[1]=[{color:"red",weight:[15,0]}] 
an[2]=[{color:"blue",weight:[0,10]}] 

Дальнейшее объяснение, имеет blue цвет, но data[0] не поэтому, weight=[0,10] .. 0 приходит из data[0], 10 приходит от

+0

Почему бы вам не включить код? – DLeh

+0

Какой вклад? – Bergi

+0

и что есть [0,0] по умолчанию по умолчанию и только обновить новое значение? – daremachine

ответ

1

Это будет работать для вас:

function indexByColor (input) { 
    var output = {}; 
    for (var i in input) { 
     for (var j in input[i]) { 
      var x = input[i][j]; 
      output[x.color] = { 
       color: x.color, 
       weight: [], 
      }; 
     }; 
    }; 
    return Object.keys(output).map(function(c){ 
     for(var i in input) { 
      var weight = 0; 
      for(var j in input[i]) 
       if(input[i][j].color == c) { 
        weight = input[i][j].weight; 
        break; 
       } 

      output[c].weight.push(weight); 
     } 

     return output[c]; 
    });  
}; 

(Fiddle)

EDIT: Как было предложено в комментариях ...

Первая часть готовит только объект вывода с объединением всех цветов во входной структуре.

Затем, внутри итерации карты, каждый экземпляр 1-го уровня проверяется на наличие цвета, а вес либо выбирается, либо по умолчанию равен 0. Это значение затем помещается в массив весов.

+2

@DavidThomas - честно говоря, я не вижу в этом полезного, но это то, что запросил OP ... Я просто взял его код и «исправил» его, чтобы создать нужный ему результат. – Amit

+0

Спасибо Amit, он работает как ожидалось , – casillas

+0

@DavidThomas - Добавлено несколько комментариев, как вы просили ... – Amit

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