Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript或查询-将关联数组转换为对象_Javascript_Jquery_Arrays_Object - Fatal编程技术网

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

Javascript或查询-将关联数组转换为对象,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,这是一个简单的问题,不是JS方面的专家,也不是到处搜索的专家,但无法获得任何关于Stackoverflow的现有示例 基本上,我有一个关联数组,我需要将其转换为一个对象: 例如: var组合产品=[[“测试-1”、“测试-1”]、[“测试-2”、“测试2”]、[“测试-3”、“测试3”] 需要它变成这样: var products = { // 'productid1':'Product Description One', 'Testing-1':'test-1'

这是一个简单的问题,不是JS方面的专家,也不是到处搜索的专家,但无法获得任何关于Stackoverflow的现有示例

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

例如:

var组合产品=[[“测试-1”、“测试-1”]、[“测试-2”、“测试2”]、[“测试-3”、“测试3”]

需要它变成这样:

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没有关联数组类型。

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

let数据=[
[“测试-1”,“测试-1”],
[“测试-2”,“测试2”],
[“测试-3”,“测试3”]
];
让newData=data.reduce((acc,curr)=>{
acc[当前值[0]]=当前值[1]
返回acc;
}, {});

console.log(newData)
如果您没有特殊的支持问题,您可以简单地使用,假设“test2”和“test3”实际上是数组类型,而不是像在示例输出中那样分别转换为
test-2
test-3

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

请注意,如上所述,Object.entries与其他解决方案不具有相同的支持。例如,请记住,它一般不会在IE和Edge中工作

var组合产品=[[“测试-1”、“测试-1”]、[“测试-2”、“测试2”]、[“测试-3”、“测试3”];
const products=Object.fromEntries(组合产品);

控制台日志(产品)您也可以使用此方法

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)
另一种与
对象连成一行的替代方法。分配
映射。

var组合产品=[
[“测试-1”,“测试-1”],
[“测试-2”,“测试2”],
[“测试-3”,“测试3”]
];
const obj=Object.assign(
{},
…combinedproducts.map(([key,value])=>({[key]:value}))
);

控制台日志(obj)我总是忘记它的存在:)很好的解决方案,可惜IE或Edge不支持它:(@Pointy我通常也支持,不知道这次为什么会想到它。@Rorymcrossan是的,因此我的前言:(.谢谢你的帮助!测试文本是打字错误,不需要转换。注意IE的兼容性问题!选择它作为答案,因为它是我所寻找的最简单的解决方案。最简单的读取=一行代码。