繁体   English   中英

Javascript 或 Query - 将关联数组转换为对象

[英]Javascript or Query - Convert Associative Array into Object

这是一个简单的问题,无论如何都不是 JS 专家并四处搜索,但无法在 Stackoverflow 上找到任何现有示例。

基本上我有一个关联数组,我需要将它转换为一个对象:

例子:

var combinedproducts = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]]

需要它变成这样:

var products = {
        // 'productid1':'Product Description One',
        'Testing-1':'test-1',
        'Testing-2':'test-2',
        'Testing-3':'test-3'
    }; 

最好/最简单的方法是什么? 我可以使用常规的 javascript 或 jquery。

谢谢您的帮助!

您可以在源数组上使用.reduce()来做到这一点:

let object = combinedProducts.reduce((o, a) => (
  o[a[0]] = a[1],
  o
), {});

就其价值而言,源数组在任何形式上都不是真正的“关联数组”。 JavaScript 没有关联数组类型。

如果您没有特定的支持问题,您可以简单地使用Object.fromEntries ,假设“test2”和“test3”实际上是数组拼写错误,而不是像示例输出中那样分别转换为test-2test-3 .

否则,您需要对它们应用转换(在这种情况下, reduce 、简单的forforeach甚至map都可以实现)。

请注意,如上所述,Object.entries 与其他解决方案的支持不同。 例如,请记住它通常不适用于 IE 和 Edge, 请查看此链接以获取更多兼容性信息

 var combinedproducts = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]]; const products = Object.fromEntries(combinedproducts); console.log(products);

您可以使用数组减少。 在回调函数中添加内部数组的第一个元素作为键,第二个元素作为值

 let data = [ ["Testing-1", "test-1"], ["Testing-2", "test2"], ["Testing-3", "test3"] ]; let newData = data.reduce((acc, curr) => { acc[curr[0]] = curr[1] return acc; }, {}); console.log(newData)

你也可以用这个方法

 const c = [["Testing-1","test-1"],["Testing-2","test2"],["Testing-3","test3"]]; obj = c.reduce((acc, [ key, val ]) => Object.assign(acc, { [key]: val }), {}); console.log(obj)

在一行中使用Object.assignmap.另一种替代方法map.

 var combinedproducts = [ ["Testing-1", "test-1"], ["Testing-2", "test2"], ["Testing-3", "test3"] ]; const obj = Object.assign( {}, ...combinedproducts.map(([key, value]) => ({ [key]: value })) ); console.log(obj);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM