2016-06-14 3 views
2

Я пытаюсь пропустить многомерный массив, чтобы получить набор значений сначала на основе месяца, а затем после этого создать другой массив внутри, упорядоченный по вопросу, и значение связанные с ним.групповой многомерный массив на основе одного атрибута javascript

Я понимаю, что это не имеет никакого смысла, так что вот plnk;

http://plnkr.co/edit/fpc3fSvoVjhEtlWuuY6m?p=preview

Если вы проверяете консоль, первый выход консоли от var data структуры, которую я хотел бы достичь (с родительским массивом, представляющего дату и 6 массивов в пределах, которые представляют данные).

В настоящее время индексируется var newValue, я хотел бы создать массив с этим выходом, но для каждой даты в данных.

Вот код;

d3.json("data.json", function(error, data) { 

    var newValue = [] 

    if (error) { 
    console.log(error); 
    } else { 
    data = data; 
    } 

    var dateS = "Jan_2016" 
    var countryS = "Netherlands" 

     for (var question = 0; question < data.questions.length; question++) { 
      var country = data.countries.indexOf(countryS); 
      var date = data.dates.indexOf(dateS); 
     newValue.push({ 
     label: data.questions[question], 
     value: data.values[question][country][date] 
     }) 
    } 
    console.log(newValue) 
}) 


var data = 
[ 
    [ 
     {label: "Large Choice of Food", value: 0}, 
     {label: "Food Quality", value: 0}, 
     {label: "Food freshness", value: 0}, 
     {label: "Taste of food", value: 0}, 
     {label: "Waiting time to recieve food", value: 0}, 
     {label: "Value for money", value: 0} 
    ], 
    [ 
     {label: "Large Choice of Food", value: 0}, 
     {label: "Food Quality", value: 0}, 
     {label: "Food freshness", value: 0}, 
     {label: "Taste of food", value: 0}, 
     {label: "Waiting time to recieve food", value: 0}, 
     {label: "Value for money", value: 0} 
    ], 
    [ 
     {label: "Large Choice of Food", value: 0}, 
     {label: "Food Quality", value: 0}, 
     {label: "Food freshness", value: 0}, 
     {label: "Taste of food", value: 0}, 
     {label: "Waiting time to recieve food", value: 0}, 
     {label: "Value for money", value: 0} 
    ] 
]; 

console.log(data) 

данные json;

{ 
    "dates": ["Jan_2016", "Feb_2016", "Mar_2016"], 
    "questions": ["Large choice of food", "Food quality", "Food freshness", "Taste of food", "Waiting time to recieve food", "Value for money"], 
    "countries": ["Netherlands", "Belgium", "France"], 
    "values": [ 
     [ 
      [5, 88, 18], 
      [50, 83, 10], 
      [29, 78, 80] 

     ], 

     [ 
      [46, 51, 61], 
      [95, 21, 15], 
      [49, 86, 43] 

     ], 
     [ 
      [7, 46, 92], 
      [54, 94, 31], 
      [89, 96, 11] 

     ], 
     [ 
      [71, 56, 54], 
      [12, 45, 3], 
      [67, 73, 92] 

     ], 
     [ 

      [28, 89, 97], 
      [15, 66, 91], 
      [19, 89, 72] 
     ], 
     [ 
      [54, 15, 61], 
      [83, 61, 9], 
      [10, 96, 57] 
     ] 
    ] 
} 

Я стучал вперед к стене, пытаясь понять это, мы надеемся, этот вопрос имеет смысл, поскольку я не уверен, что я объяснил это достаточно хорошо?

В любом случае, пожалуйста, дайте мне знать, если вы хотите, чтобы я попытался объяснить это дальше, и любые советы очень ценятся!

+2

Я не могу понять, чего вы хотите достичь. Может быть, вы можете добавить пример ожидаемого вывода? –

+0

Я обновил 'var data', чтобы показать прямое представление того, что я пытаюсь достичь, и каждый родительский массив представляет месяц. [Plnk] (http://plnkr.co/edit/fpc3fSvoVjhEtlWuuY6m?p=preview). Я также обновляю сообщение – since095

+0

. Вам нужно быть более четким в том, какие ваши входы и выходы вам нужны. Я также не понимаю, что вы пытаетесь сделать. Как насчет того, чтобы вы записывали то, что ожидаете от вывода. – wot

ответ

1

Если я правильно понимаю ваш вопрос, вы ищете это:

d3.json("http://run.plnkr.co/JMKRNs0G3MYBqSnI/data.json", function(error, data) { 
 

 
    var newValue = []; 
 

 
    var dateS = "Feb_2016"; 
 
    var k = data.dates.indexOf(dateS); 
 

 
    for (var i = 0; i < data.countries.length; i++) { 
 
    var country = data.countries[i]; 
 
    var answers = []; 
 
    for (var j = 0; j < data.questions.length; j++) { 
 
     answers.push({ 
 
     label: data.questions[j], 
 
     value: data.values[j][i][k] 
 
     }); 
 
    } 
 
    newValue.push(answers); 
 
    } 
 
    console.log(newValue); 
 
});
<script data-require="[email protected]*" data-semver="3.5.3" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.js"></script>

+0

. Интересно, почему фрагмент Stack не удается ... – Midas

+0

Я поместил его в свой код, и он работает!Ну, мне просто пришлось переключать страну и дату вокруг ([рабочий плнк] (http://plnkr.co/edit/TOHR2sfcdYMJdlX7wyJx?p=preview)). Спасибо за помощь, я с облегчением понял, что я имел в виду! – since095

0

Согласно тому, что вы сказали, что вы зафиксируете для достижения этой цели было бы лучше формат данных.

У вас есть массив объектов даты, каждый из которых содержит массив стран и вопросы. В массиве вопросов содержится вопрос с массивом ответов. Таким образом, данные могут иметь различное количество стран и вопросы. У вопросов может быть множество ответов.

var data = [ 
    { 
     'date': 'Jan_2016', 
     'countries': ['Netherlands', 'Belgium', 'France'], 
     'questions': [ 
         {'Large choice of food': [5, 88, 18]}, 
         {'Food quality': [46, 51, 61]}, 
         {'Food freshness': [7, 46, 92. 55, 87]}, 
         {'Taste of food': [71, 56, 54]}, 
         {'Waiting time to recieve food': [28, 89, 97]}, 
         {'Value for money': [54, 15, 44, 61]}, 
        ] 
    }, 
    { 
     'date': 'Feb_2016', 
     'countries': ['Netherlands', 'Belgium', 'France', 'Japan', 'Africa', 'Germany'], 
     'questions': [ 
         {'Large choice of food': [50, 83, 10]}, 
         {'Food quality': [95, 21, 15]}, 
         {'Food freshness': [54, 94, 31]}, 
         {'Taste of food': [71, 56, 54, 14]}, 
         {'Waiting time to recieve food': [15, 66, 91]}, 
         {'Value for money': [83, 61, 9]}, 
        ] 
    } 
];