2017-01-31 62 views
0

我有一個問題,我正在使用的API調用是使用一個包含單個數組值的屬性(keys屬性,請參閱下面的內容)發送對象。不幸的是,我不能使用這種格式,因爲我必須遵守嵌套數組,以便在單獨的應用程序中使用輸出值,如[[value1, value2, value3, value4],[value1, value2, value3, value4]]。我打算要求一個單獨的問題來解決嵌套的數組部分,除非有人認爲這是一個簡單的修復(我相信我應該使用.map來轉換對象)。Javascript - 將JSON對象的屬性值從數組轉換爲字符串

這是我的對象的格式(從console.log(searchQueries)):

[ { keys: [ 'hammer' ], 
    clicks: 1369, 
    impressions: 3151, 
    ctr: 0.4344652491272612, 
    position: 1.004443033957474 }, 
    { keys: [ 'woodmaking' ], 
    clicks: 207, 
    impressions: 6324, 
    ctr: 0.03273244781783681, 
    position: 4.35831752055661 }, 
    { keys: [ 'house trends' ], 
    clicks: 1, 
    impressions: 3, 
    ctr: 0.3333333333333333, 
    position: 4.666666666666666 }, 
    { keys: [ 'housing' ], 
    clicks: 1, 
    impressions: 36, 
    ctr: 0.027777777777777776, 
    position: 6.472222222222222 } ] 
byProperty 

以上響應從通過了以下在for循環被嵌套在這個API響應陣列的結果中的對象最初:

for (var prop in res){ 
       searchQueries = res[prop]; 

       console.log(searchQueries); 
} 

請問JSON.stringify方法或.toString('keys')達到我在尋找什麼呢?

+2

你試過'JSON.stringify'或'toString'嗎? –

+0

是的,'JSON.stringify'只是把我的變量,解析爲'keys'值並輸出結果。 'toString('keys')'帶回錯誤 – cphill

回答

1
answer=Object.values(searchQueries).map(el=>{el.keys=el.keys[0];return Object.values(el)}); 
console.log(searchQueries); 

https://jsbin.com/biyazunafu/1/edit?console

環路主陣列上,轉動對象(EL)的鍵陣列轉換成字符串,比把整個對象到其值Array。然而,Object.values是實驗性的,所以可以不要在用戶端使用這個,而不是使用此代碼transpiled到ES5:如果您想打開keys從數組轉換成字符串

answer=[]; 
for(key in searchQueries){ 
    answer.push(searchQueries[key]); 
} 
answer=answer.map(function(el){ 
    el.keys=el.keys[0]; 
    var newel=[]; 
    for(key in el){ 
    newel.push(el[key]); 
    } 
return newel; 
}); 
+0

你能解釋一下這個班輪嗎? – soundslikeodd

+0

@soundslikeodd舒爾。編輯 –

+0

@Jonasw感謝您的幫助,但您是否將您的答案轉換爲不使用實驗方法和ES6的答案? – cphill

0
  • 第一獲取密鑰值

    var keys = searchQueries.map(function(e){return e.keys;}); 
    

這將輸出:

[["hammer"], ["woodmaking"], ["house trends"], ["housing"]] 
  • 第二:的毗連所得陣列

    var values = keys.join(',').split(','); 
    

其結果是:

["hammer", "woodmaking", "house trends", "housing"] 
2

,你只需要迭代你的數組,並進行更改:

searchQueries.forEach(function (obj) { obj.keys = obj.keys[0] }) 
+0

謝謝你的回答。我很抱歉,但我忘記了用什麼循環來輸出結果。有一個for-in循環,結果被傳遞給'searchQueries'變量。我相信這可能是我爲什麼在'.forEach'上收到'TypeError:searchQueries.forEach不是函數'的原因。因爲它嵌套在一個對象中。你會同意嗎? – cphill

+0

@cphill console.log(typeof searchQueries);返回? –

+0

@Jonasw'對象 字符串' – cphill

相關問題