Разбейте строку в свойстве объекта и создайте новый набор данных - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть набор данных, где последний элемент представляет собой строку в форме предложения. Моя цель - разбить предложение на слова и создать новый набор данных, в котором каждое слово находится на отдельной строке, как показано ниже:

Вот формат старого набора данных:

0: Object { creator: "molly", number: 3, doc: "The cat in the hat ate the rat", … }
1: Object { creator: "may", number: 4, doc: "the crass rat", … }
2: Object { creator: "may", number: 4, doc: "The mouse in the pouch at the cat", … }
3: Object { creator: "may", number: 4, doc: "the fish hog", … }
4: Object { creator: "may", number: 4, doc: "the dog warm", … }

Вот формат, к которому я стремлюсь:

0: Object { creator: "molly", number: 3, doc: "The", … }
1: Object { creator: "molly", number: 3, doc: "cat", … }
2: Object { creator: "molly", number: 3, doc: "in", … }
3: Object { creator: "molly", number: 3, doc: "the", … }
4: Object { creator: "molly", number: 3, doc: "hat", … }
5: Object { creator: "molly", number: 3, doc: "ate", … }
6: Object { creator: "molly", number: 3, doc: "the", … }
7: Object { creator: "molly", number: 3, doc: "rat", … }
8: Object { creator: "may", number: 4, doc: "the", … }
9: Object { creator: "may", number: 4, doc: "crass", … }
10: Object { creator: "may", number: 4, doc: "rat", … }

Я использую D3. Следующий код позволил мне сгенерировать новый набор данных, в котором каждое слово находится в отдельной строке:

doc.csv:

    date,number,creator,,doc
6/16/2000,3,molly,3,The cat in the hat ate the rat
2/25/2002,4,may,2,The mouse in the pouch at the cat
12/5/2004,3,molly,4,the lovely fish
7/6/2006,1,milly,1,the pog dog
9/7/2003,4,may,4,the fish hog
12/10/2001,4,may,3,the crass rat
6/15/2005,2,maggie,3,the ass rat
6/9/2004,1,milly,4,the fish blue
10/5/2005,1,milly,3,the rat true
10/7/2003,4,may,1,the dog warm
1/19/2009,4,may,2,the cat norm
10/30/2007,1,milly,4,the fish wish
8/13/2009,4,may,2,cat bat ticks
9/30/2004,3,molly,1,dog nog mog
1/17/2006,4,may,3,rat tittily too
12/18/2009,3,molly,1,dog coppily poo
11/2/2007,2,maggie,3,rat pitpat poo
4/17/2007,1,milly,4,fish too!

HTML:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta chartset="utf-8">
        <title>Interactive scatterplot</title>
        <link rel="stylesheet" type="text/css" href="style.css">
        <script type="text/javascript" src="d3.v4.js"></script>

    </head>

    <body>

<script type="text/javascript" src="split.js"></script>

<textarea id="txtName" name="txt-Name" placeholder="Search for something.." rows="1"></textarea>


</div>
    </body>
</html>

код:

var parseDate = d3.timeParse("%m/%d/%Y");

    var hoot = function(d) {return d.doc.split(" ").forEach(function (item) {
        var data2 = {creator: d.creator, date: parseDate(d.date),item: item}
        console.log(data2)
    });}



    d3.csv("doc.csv")
      .row(function(d) {return {creator: d.creator,date: parseDate(d.date),number: Number(d.number),doc: d.doc, split: (hoot(d))};})
      .get(function(error, data) {

    });

К счастью, когда я утешаю данные data.log2, я получаю что-то, приближающееся к моей конечной цели:

enter image description here

У меня две проблемы:

1) Переменная data2 недоступна после запуска функции. Я пытался сделать data2 глобальной переменной, поместив var data2 = []; в начале скрипта, но это не работает.

2) Переменная data2 не принимает форму одного массива. Я попытался заключить квадратные скобки вокруг строки переменной (т. Е. var data2 = [{creator: d.creator, date: parseDate(d.date),item: item}]), но это дает много массивов, а не один массив.

Заранее спасибо за ваше время.

1 Ответ

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

Здесь data2 - локальная переменная внутри цикла foreach. Таким образом, даже если вы сделаете его глобальным, вы получите значение только во время последней итерации. Вместо этого вы можете создать data2 массив и push значения в нем во время каждой итерации. Это может выглядеть примерно так

var parseDate = d3.timeParse("%m/%d/%Y");
var data2 = [];
    var hoot = function(d) {return d.doc.split(" ").forEach(function (item) {
       data2.push({creator: d.creator, date: parseDate(d.date),item: item})
    });}
console.log(data2);



    d3.csv("doc.csv")
      .row(function(d) {return {creator: d.creator,date: parseDate(d.date),number: Number(d.number),doc: d.doc, split: (hoot(d))};})
      .get(function(error, data) {

    });

Теперь войдите в консоль и посмотрите, надеюсь, вы получите ожидаемые результаты.

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