Выдвижение массива объектов в массив для сортировки - PullRequest
0 голосов
/ 10 сентября 2018

После выяснения того, что сортировка объектов невозможна - даже если мне нужны значения отсортированных объектов - я считаю, что для сортировки необходимо перенести содержимое массива объектов в массив.

Мой код ниже производит этот вывод без реализации какой-либо функции отправки в массив:

enter image description here

Это мой код:

var aveArr = {};
var length = 0;
var q = d3.queue();
['csv goes here', 'another csv goes here'].map((c) => {
  q.defer(d3.csv, c);
  length += 1;
});

q.awaitAll(function(d, csvs){
    var selection = d3.merge(csvs);

    selection.map((d,i) => {
      aveArr[d.word] = {
        sum: 0,
        average: 0,
    };  

    var obj = aveArr[d.word];
    obj.sum += +d.frequency;
    obj.average = obj.sum / length;
});

  console.log(aveArr); 

});

Мне нужно, чтобы только слово и среднее значение отображались в консоли, а затем средние значения были отсортированы.

Я нашел этот для передачи содержимого в массивы, но для меня это не работает.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Хотите сохранить структуру вашего объекта?

const aveArr = {
  '0': { sum: 0, average: 0 },
  '001': { sum: 0, average: 0 },
  '00': { sum: 1, average: 0.5 },
  '01': { sum: 0, average: 0 },
  '1': { sum: 11, average: 5.5 },
  '1am': { sum: 0, average: 0 },
  '1pickford': { sum: 0, average: 0 },
  '1pm': { sum: 0, average: 0 },
  '1pm': { sum: 0, average: 0 },
  '1st': { sum: 3, average: 1.5 },
  '1x': { sum: 2, average: 1 },
  '1xbet': { sum: 0, average: 0 }
};

const transformed = Object
  .keys(aveArr).map(key => ({ name: key, average: aveArr[key].average }));
  
const sorted = transformed.sort((left, right) => left.average - right.average);

console.log(sorted);
0 голосов
/ 10 сентября 2018

В данный момент вы используете «массив» в качестве объекта, устанавливая ключи на нем. Я бы посоветовал изменить структуру данных, чтобы это был реальный массив с фиксированными полями. Тогда сортировка и преобразование становится очень простым:

//	source data
const data = [
  { name: "0", sum: 0, average: 0 },
  { name: "001", sum: 0, average: 0 },
  { name: "00", sum: 1, average: 0.5 },
  { name: "01", sum: 0, average: 0 },
  { name: "1", sum: 11, average: 5.5 },
  { name: "1am", sum: 0, average: 0 },
  { name: "1pickford", sum: 0, average: 0 },
  { name: "1pm", sum: 0, average: 0 },
  { name: "1pm2", sum: 0, average: 0 },
  { name: "1st", sum: 3, average: 1.5 },
  { name: "1x", sum: 2, average: 1 },
  { name: "1xbet", sum: 0, average: 0 }
];
const transformed = data
  //	we only want the name and average
  .map(({ name, sum, average }) => ({ name, average }))
  //	sort by average
  .sort(( a, b ) => a.average - b.average );

console.log( transformed );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...