javascript - 将对象数组推送到数组以进行排序
问题描述
在发现排序对象是不可能的之后——即使我需要排序对象的值——我相信我必须将对象数组的内容推送到一个数组中进行排序。
我下面的代码在没有实现任何发送到数组函数的情况下产生此输出:
这是我的代码:
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);
});
我只需要在控制台中显示单词和平均值,然后对平均值进行排序。
我发现这个用于将内容推送到数组,但对我来说,它不起作用。
解决方案
目前,您通过在其上设置键将“数组”用作对象。我建议更改数据结构,使其成为具有固定字段的真实数组。那么排序和转换就变得很容易了:
// 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 );
推荐阅读
- android - 使用 SupportBlurDialogFragment 时如何使用边框半径更改背景?
- google-cloud-platform - 出现错误 400:cognito idp 设置中的 redirect_uri_mismatch
- python - 用另一个字典的值替换字典的列值
- git - 自动跟踪新工作树分支
- kubernetes - 端口 10250 上即将过期的 Kubelet 证书
- javascript - 初始化后vue prism编辑器更新语言
- javascript - Jest 测试异步功能 - 测试运行完成后一秒钟 Jest 没有退出
- webpack - 从未正确解析的 SCSS 文件中从 extract-text-webpack-plugin 切换到 mini-css-extract-plugin URL 后
- html - 在样式化 css 文档时使用“html{}”和“root:”伪类有什么区别?
- woocommerce - woocomerce 相关产品标签随机