首页 > 解决方案 > 将对象数组推送到数组以进行排序

问题描述

在发现排序对象是不可能的之后——即使我需要排序对象的值——我相信我必须将对象数组的内容推送到一个数组中进行排序。

我下面的代码在没有实现任何发送到数组函数的情况下产生此输出:

在此处输入图像描述

这是我的代码:

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); 

});

我只需要在控制台中显示单词和平均值,然后对平均值进行排序。

我发现这个用于将内容推送到数组,但对我来说,它不起作用。

标签: javascriptarraysobject

解决方案


目前,您通过在其上设置键将“数组”用作对象。我建议更改数据结构,使其成为具有固定字段的真实数组。那么排序和转换就变得很容易了:

//	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 );


推荐阅读