【问题标题】:JS / ES6: Object to Array conversionJS / ES6:对象到数组的转换
【发布时间】:2017-04-06 20:22:24
【问题描述】:

我的一个节点 js 库正在以错误的格式返回一些我需要的数据,如下所示:

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

(请注意,值无关紧要) 但我需要以某种方式循环这个数组,我为我的 A 找到我的 B 具有一定的值(在这种情况下,例如'2',我需要'4')并且我的程序的所有其他部分到目前为止使用这样的数组:

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

这将是我的首选方法。

还要注意a中的数据量总是和b、c一样,但本身是可变的。

那么在 ES6/JS 中实现这一点的“最佳”方法是什么(在我开始搞乱 for 循环之前)?

【问题讨论】:

  • "将是“最好的”方式"...如果这个问题阻碍了您的进步,那么我强烈建议您阅读以下内容:@987654321 @
  • 这里显示的使用数组的例子有一个错误,特别是“Uncaught SyntaxError: Unexpected token,”。你打算把它变成一个数组吗?我觉得这是您问题的关键部分。
  • 其实for循环是个不错的主意。
  • 如果你愿意,你可以得到quitefancy...
  • @TravisJ 是的,它旨在作为数组。我只是输入它作为示例。另外,我知道为什么要使用“最佳”?首先:这个特定的代码会经常被调用,所以优化它会很好。第二:如果我们只是想“哦,那已经足够好了”——就技术或其他方面而言,我们将不会是现在这样:)

标签: javascript arrays ecmascript-6


【解决方案1】:

如果您正在寻找像这样的对象进行变换

{"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;
  }, []);
}

【讨论】:

  • 你的问题有{["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。
  • 是的,你是对的。我现在会更新这个。也非常感谢您的快速响应,这非常有效。
  • for infor (let i=0; i<data[key].length; i++) 循环不会更简单吗?
  • @Bergi 不使用for in,因为它不会提供索引,而基本的for 会添加更多样板文件。不过我确实同意可以使用reduce
猜你喜欢
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
相关资源
最近更新 更多