2017-01-31 58 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

相关问题