2016-12-04 3 views
-5

У меня есть данные как это в виде табличного формата и как я могу перебирать цикл для javascript для генерации ниже json-формата. И таблица содержит 1000 + строк с разными именами. Выборочные данные, как показано ниже:Строить JSON динамически в javascript

Name Date value 

Скотт 01.01.2000 12

Smith 01/02/2000 22

Скотт 01/02/2000 23

И я хочу, чтобы создать json, как показано ниже:

var myJSON = [ 
      { 
       Name: "Smith", 
       DataValue: [{Date: "01/02/2000", Value: "22"}] 
      }, 
      { 
       Name: "Scott", 
       DataValue: [{Date: "01/01/2000", Value: "12"}, {Date: "01/02/2000", Value: "23"}] 
      } 
     ] 
+2

Возможный дубликат [? Как я построить JSON динамически в JavaScript] (http://stackoverflow.com/questions/4314008/how-do-i-build-json-dynamically-in-javascript) – Winter

+0

@Winter, я также проверил связанный u предоставленный, прежде чем отправлять вопрос. Это не так. В моем случае таблица данных является динамической. –

ответ

0

Вы можете сопоставить каждый под-массив вашего массива в объект и отсортировать его так, чтобы объект, имеющий ev ru Значение имени - соседи. И, наконец уменьшить с помощью конкатенации, как это: в ES6

var table = [ 
 
    ["Scott", "01/01/2000", "12"], 
 
    ["Smith", "01/02/2000", "22"], 
 
    ["Scott", "01/02/2000", "23"] 
 
]; 
 
var results = table.map(x => ({Name : x[0], DataValue : [{Date : x[1], Value : x[2]}]})).sort((a,b) => a.Name < b.Name); 
 
results.forEach((x,i,arr) => { 
 
    if (i < arr.length-1 && arr[i+1].Name == x.Name) { 
 
    arr[i+1].DataValue = arr[i+1].DataValue.concat(x.DataValue); 
 
    arr.splice(i,1) 
 
    } 
 
}) 
 
console.log(results);
или в старом JS:

var table = [ 
 
    ["Scott", "01/01/2000", "12"], 
 
    ["Smith", "01/02/2000", "22"], 
 
    ["Scott", "01/02/2000", "23"] 
 
]; 
 
var results = table.map(function(x) { 
 
    return {Name : x[0], DataValue : [{Date : x[1], Value : x[2]}]}; 
 
}) 
 
.sort(function(a,b) { 
 
    return a.Name < b.Name 
 
}); 
 
results.forEach(function(x,i,arr) { 
 
    if (i < arr.length-1 && arr[i+1].Name == x.Name) { 
 
    arr[i+1].DataValue = arr[i+1].DataValue.concat(x.DataValue); 
 
    arr.splice(i,1) 
 
    } 
 
}); 
 
console.log(results);

+0

Привет, Кевин, спасибо большое. не могли бы вы, пожалуйста, дайте мне знать, если мне нужно добавить любую библиотеку javascript, такую ​​как jquery.dataTables или что-нибудь еще? Я получаю сообщение об ошибке systax на «x =>» на 6-й строке. –

+0

Нет, вам не нужны дополнительные библиотеки, это чистый ваниль. Но, возможно, ваша рабочая плита не принимает ES6. Поэтому вы можете использовать мое второе решение, которое я только что добавил. –

Смежные вопросы