Javascript JS/ES6:对象到数组的转换
我的一个node js库正在以错误的格式返回我需要的一些数据,如下所示:Javascript JS/ES6:对象到数组的转换,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我的一个node js库正在以错误的格式返回我需要的一些数据,如下所示: {"a":["1","2"],"b":["3","4"],"c":["5","6"]} [{"a":"1", "b":"3", "c":"5"}, {"a":"2", "b":"4", "c":"6"}] (请注意,这些值并不重要) 但是我需要以某种方式循环这个数组,我发现我的B代表我的a,它有一个特定的值(在这种情况下,例如“2”,我需要“4”),到目前为止,我的程序的所有其他部分都在使用这样的数组: {"a":["
{"a":["1","2"],"b":["3","4"],"c":["5","6"]}
[{"a":"1", "b":"3", "c":"5"}, {"a":"2", "b":"4", "c":"6"}]
(请注意,这些值并不重要)
但是我需要以某种方式循环这个数组,我发现我的B代表我的a,它有一个特定的值(在这种情况下,例如“2”,我需要“4”),到目前为止,我的程序的所有其他部分都在使用这样的数组:
{"a":["1","2"],"b":["3","4"],"c":["5","6"]}
[{"a":"1", "b":"3", "c":"5"}, {"a":"2", "b":"4", "c":"6"}]
这将是我的首选方法
还要注意,a中的数据量始终与b和c相同,但其本身是可变的
那么,在ES6/JS中实现这一点的“最佳”方法是什么(在我开始处理for循环之前)?如果您希望转换类似于
{"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;
}, []);
}
“将是“最好的”方式”。。。如果这个问题阻碍了您的进度,那么我强烈建议您阅读以下内容:使用此处显示的数组的示例有一个错误,特别是“Uncaught SyntaxError:Unexpected token”。你打算把它变成一个数组吗?我觉得这是你的一个关键问题。实际上for循环是个不错的主意。如果你愿意,你可以得到…@TravisJ是的,它是作为数组使用的。我只是打了个例子。还有,我知道为什么要用“最好的”这个说法?第一:这个特定的代码会经常被调用,所以优化它会很好。第二:如果我们只是想“哦,这足够好了”-我们就不会像现在这样在技术或其他方面:)你的问题是
{{a:“1”,“b:“3”,“c:“5”,“a:“2”,“b:“4”,“c:“6”}
我假设你是[{a:“1”,“b:“3”,“c:“5”},{a:“2”,“b:“4”,“c:”6”}
,因为第一个是无效的,你是对的。我现在就更新这个。同样非常感谢您的快速响应,这非常有效。不会for in
和for(让i=0;i@Bergi在
中不使用for,因为它不会提供索引,而
的基本将添加更多的样板文件。但是我同意可以使用reduce
。