我有一个具有以下数据的变量:
var data = [
{date: "2007-04-23", a: "93.24", b: "10.24"},
{date: "2007-04-24", a: "95.35", b: "20.24"},
{date: "2007-04-25", a: "98.84", b: "30.24"},
{date: "2007-04-26", a: "99.92", b: "40.24"}
];我需要完成以下步骤:
排序行的总和
其结果应该是:
var data = [
{date: "2007-04-26", a: 99.92, b: 40.24, total:140.16},
{date: "2007-04-24", a: 95.35, b: 20.24, total:115.59},
{date: "2007-04-23", a: 93.24, b: 20.24, total:113.48},
{date: "2007-04-25", a: 98.84, b: 10.24, total:109.08}
];我知道在解析csv文件时您可以这样做。我试过以下几种方法,但不起作用
<!DOCTYPE html>
<html>
<head>
<script src="https://d3js.org/d3.v6.min.js"></script>
</head>
<body>
<script>
var data = [
{date: "2007-04-23", a: "93.24", b: "20.24"},
{date: "2007-04-24", a: "95.35", b: "20.24"},
{date: "2007-04-25", a: "98.84", b: "10.24"},
{date: "2007-04-26", a: "99.92", b: "40.24"}
];
data.columns = Object.keys(data[0]);
var data1 = autoType(data),
(d, i, columns) => (d3.autoType(d), d.total = d3.sum(columns, c => d[c]), d).sort((a, b) => b.total - a.total);
</script>
</body>
</html>
如何使用已定义的变量来完成此操作?
发布于 2020-12-22 16:29:16
您可以用总计映射一个新数组,并按total进行排序。
const
data = [{ date: "2007-04-23", a: "93.24", b: "10.24" }, { date: "2007-04-24", a: "95.35", b: "20.24" }, { date: "2007-04-25", a: "98.84", b: "30.24" }, { date: "2007-04-26", a: "99.92", b: "40.24" }],
result = data
.map(({ a, b, ...o }) => ({ ...o, a: +a, b: +b, total: +(+a + +b).toFixed(2) }))
.sort((a, b) => b.total - a.total);
console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
发布于 2020-12-23 01:38:50
创建d3.autoType是为了在获取/解析DSV时使用,但是在您的情况下可以很容易地使用它,传递数组中的对象。例如(使用浏览器控制台查看真实日期对象):
var data = [
{date: "2007-04-23", a: "93.24", b: "10.24"},
{date: "2007-04-24", a: "95.35", b: "20.24"},
{date: "2007-04-25", a: "98.84", b: "30.24"},
{date: "2007-04-26", a: "99.92", b: "40.24"}
];
var converted = data.map(row => d3.autoType(row));
console.log(converted)<script src="https://d3js.org/d3.v6.min.js"></script>
https://stackoverflow.com/questions/65412185
复制相似问题