2016-11-23 44 views
2

我的一个节点JS库是将一些数据,我需要在错误的格式是这样的:JS/ES6:对象数组转换

{"a":["1","2"],"b":["3","4"],"c":["5","6"]} 

(注意,值并不重要) 但我需要以某种方式循环这个数组,我发现我的B对于具有特定值的A(在这种情况下,例如'2',我需要'4'),并且我的程序的所有其他部分到目前为止使用数组像这样:

[{"a":"1", "b":"3", "c":"5"}, {"a":"2", "b":"4", "c":"6"}] 

,这将是我的首选方法。

另请注意,a中的数据量总是与b和c相同,但本身是可变的。

那么在ES6/JS(在我开始搞乱for循环之前)完成这个“最好”的方法是什么?

+0

“*将是“最好”的方式*“......如果这个问题阻碍了你的进展,那么我会强烈建议你阅读:http:/ /www.joelonsoftware.com/articles/fog0000000018.html –

+2

使用此处显示的数组的示例有一个错误,值得注意的是“* Uncaught SyntaxError:Unexpected token,*”。你打算成为一个阵列吗?我觉得这是你问题的一个关键部分。 –

+1

其实for-loops会是一个不错的主意。 – Bergi

回答

2

如果您正在寻找变换对象像

{"a":["1","2"],"b":["3","4"],"c":["5","6"]} 

进入一个阵列状

[{"a":"1","b":"3","c":"5"},{"a":"2","b":"4","c":"6"}] 

像这样的东西是最简单的方法我能想到的

function formatData (data) { 
    return Object.keys(data).reduce((arr, key) => { 
    data[key].forEach((value, i) => { 
    const iObj = arr[i] || (arr[i] = {}); 
    iObj[key] = value; 
    }); 
    return arr; 
    }, []); 
} 
+0

你有问题有'{[“a”:“1”,“b”:“3”,“c”:“5”],[“a”:“2”,“b”:“4” ,“c”:“6”]}'我假设你打算成为'[{“a”:“1”,“b”:“3”,“c”:“5”},{“ a“:”2“,”b“:”4“,”c“:”6“}]',因为第一个是无效的js。 –

+0

是的,你是对的。我现在会更新这个。对于快速响应也非常感谢,这完美地工作。 – ThexBasic

+0

不会'in for'和'for(let i = 0; i Bergi