2015-02-05 3 views
-1

У меня возникли проблемы с преобразованием результата результата elasticsearch в другую форму. Есть ли быстрый способ сделать это, или нужно было бы прыгать в цикле for? Заранее спасибо:Javascript Object to different form

Формат мои данные в: Это как в сыром виде:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] 
1. 0: Object 
1. count: 986 
2. term: "virginia" 
3. __proto__: Object 
2. 1: Object 
1. count: 447 
2. term: "washington" 
3. __proto__: Object 
3. 2: Object 
1. count: 345 
2. term: "newYork" 

Формат Мне нужно преобразовать:

var states= [ 
     { 
     "key": 'popular', 
     "values": [ 
      [ 'texas' , 10] , 
      [ 'washington' , 5] , 
      [ 'new york' , 20] , 
      [ 'virginia' , 40]   
     ] 
     } 
    ]; 

Чтобы показать, как выглядят данные, на этом изображении отображается форма с консоли: enter image description here

+0

Но с правом числа, правильно? Например, '' washington'' будет иметь номер 447, а не 5. –

+2

Да, вам нужен цикл (почему люди так стремятся избегать циклов?). В современных браузерах необязательно быть циклом 'for'; 'Array # map' или' Array # forEach' выглядят достаточно применимыми. –

+0

Итак, пройдитесь и сделайте массив, который вы ожидаете. – epascarello

ответ

1

Глядя на ваши данные образца, он представляет собой массив объектов, каждый из которых имеет свойство term и count. Array#map будет делать трюк для преобразования его в массивы с термином в первом положении и подсчета во втором:

var states= [ 
    { 
    "key": 'popular', 
    "values": data.map(function(entry) { 
     return [entry.term, entry.count]; 
    }) 
    } 
]; 

Живой пример:

var data = [ 
 
    { 
 
    term: "virginia", 
 
    count: 986 
 
    }, 
 
    { 
 
    term: "washington", 
 
    count: 447 
 
    }, 
 
    { 
 
    term: "newYork", 
 
    count: 345 
 
    } 
 
]; 
 

 
var states= [ 
 
    { 
 
    "key": 'popular', 
 
    "values": data.map(function(entry) { 
 
     return [entry.term, entry.count]; 
 
    }) 
 
    } 
 
]; 
 

 
// Result (I'm only using JSON here as a convenient way to 
 
// display the result; the question doesn't use JSON at all) 
 
var pre = document.createElement('pre'); 
 
pre.innerHTML = JSON.stringify(states, null, 2); 
 
document.body.appendChild(pre);

+0

Отличная благодарность! – user2816352

+0

@ user2816352: Не беспокойтесь. Я должен был упомянуть: «Array # map» - это функция ES5, если вам нужно поддерживать старые браузеры, такие как IE8, вам понадобится полиполк (но это * * одна из вещей, которые могут быть заполнены полифорами). –