对JS对象中的CSV数据进行排序



我需要一些帮助,用JS对1370行CSV数据进行排序!我正在使用d3库创建一个数据可视化。

CSV在这里:https://github.com/nickrinaldi88/BreitBart_DataVis/blob/main/breitbartData.csv

我的项目

我有一个csv文件,有3列,日期,单词和计数。

本质上,我想为每个唯一的单词(有10个唯一的单词(有10个不同的对象数组,比如:

var Obama = [{date: 'the date', count: 72}, {date: 'the date', count: 41}]
var Trump = [{date: 'the date', count: 568}, {date: 'the date', count: 92}]

对于每个单词,都有136行数据,这意味着理想情况下,我希望每个数组包含136个对象,这些对象对应于现有的日期和计数属性。

我应该使用d3.nest函数吗?

我发现自己试图在循环中动态创建数组,但很难得到我想要的结果。朝着正确的方向推动会有所帮助。

谢谢!

这里有一种使用普通JavaScript的方法。

免责声明这是一种非常昂贵的方法,只要付出一点努力就可以优化性能。

首先获取数据。。。

然后通过处理CSV:开始

  1. 拆分CSV字符串(拆分(
  2. 移除收割台(切片(
  3. 筛选出最后一个空字符串(筛选器(
  4. 迭代字符串数组以创建数组数组(map(
function processCSV(csv){
return csv.split("rn").slice(1).filter(c=>c).map(d=>d.split(','));
}

然后找到唯一的单词:

  1. 使用集合确保只有唯一的值
  2. 迭代数据以提取唯一的单词并添加到集合中
  3. 返回唯一单词和数据的数组
function findUniqueWords(data){
const words = new Set(); 
data.forEach(d=>{
words.add(d[1]);
});
return [Array.from(words), data];
}

然后创建所需的格式化对象数组:

  • 迭代唯一的单词
    • 只筛选包含该单词的记录的数据
    • 迭代这些记录以创建所需的格式
function createArrays(args) {
const [words,data] = [...args];
return words.map(w=>{
return data.filter(record=>record[1] === w).map(fd=>{
return {[w]:{date:fd[0], count: fd[2]}};
});
}).flat();
}

然后对输出执行某些操作

这是完整的代码。由于CORS的限制,此代码将不会在此处运行。

fetch('https://raw.githubusercontent.com/nickrinaldi88/BreitBart_DataVis/main/breitbartData.csv')
.then(res=>res.text())
.then(processCSV)
.then(findUniqueWords)
.then(createArrays)
.then(console.log);
function processCSV(csv){
return csv.split("rn").slice(1).filter(c=>c).map(d=>d.split(','));
}
function findUniqueWords(data){
const words = new Set(); 
data.forEach(d=>{
words.add(d[1]);
});
return [Array.from(words), data];
}
function createArrays(args) {
const [words,data] = [...args];
return words.map(w=>{
return data.filter(record=>record[1] === w).map(fd=>{
return {[w]:{date:fd[0], count: fd[2]}};
});
}).flat();
}

最后,这里有一个演示结果的回复:

https://repl.it/@randycasburn/AlertPoorCodes

相关内容

  • 没有找到相关文章

最新更新