2015-02-05 71 views
-1

我無法將elasticsearch的後續結果轉換爲其他形式。有沒有一個快速的方法來做到這一點,或者跳轉到for循環是必要的?在此先感謝:使用不同形式的Javascript對象

格式我的數據是: 這是它是如何在原始格式:

[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

但隨着權數字,對吧?例如,「華盛頓」會有447個,而不是5個。 – 2015-02-05 15:24:42

+2

是的,你需要一個循環(爲什麼人們非常想避免循環?)。它不一定是現代瀏覽器上的「for」循環; 'Array#map'或'Array#forEach'看起來相當適用。 – 2015-02-05 15:25:27

+0

因此循環並製作您期望的數組。 – epascarello 2015-02-05 15:25:38

回答

1

看你的樣本數據,這似乎是對象的數組,每一個termcount屬性。 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 2015-02-05 15:50:26

+0

@ user2816352:不用擔心。我應該提到:Array#map是一個ES5特性,如果你需要支持像IE8這樣的老式瀏覽器,你需要一個polyfill(但它*是可以被填充的東西之一)。 – 2015-02-05 15:51:17