Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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/3/arrays/12.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_Arrays_Object - Fatal编程技术网

Javascript 将数组作为项转换为对象作为项的对象

Javascript 将数组作为项转换为对象作为项的对象,javascript,arrays,object,Javascript,Arrays,Object,我有这样一个数组: var arr = [ ['a1','b1','c1','d1'], ['a1','e1','i1','j1'], ['a1','f1','k1','l1'], ['a1','g1','m1','n1'], ['a1','h1','o1','p1'], ['a2','b2','c2','d2'], ['a2','e2','i2','j2'], ['a2','f2','k2','l2'], ['a2','g

我有这样一个数组:

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];
var converted_arr = {
    'a1':{
        'b1':['c1','d1'],
        'e1':['i1','j1'],
        'f1':['k1','l1'],
        'g1':['m1','n1'],
        'h1':['o1','p1'],
    },
    'a2':{
        'b2':['c2','d2'],
        'e2':['i2','j2'],
        'f2':['k2','l2'],
        'g2':['m2','n2'],
        'h2':['o2','p2'],
    }
};
我想把它转换成这样一个对象:

var arr = [
    ['a1','b1','c1','d1'],
    ['a1','e1','i1','j1'],
    ['a1','f1','k1','l1'],
    ['a1','g1','m1','n1'],
    ['a1','h1','o1','p1'],
    ['a2','b2','c2','d2'],
    ['a2','e2','i2','j2'],
    ['a2','f2','k2','l2'],
    ['a2','g2','m2','n2'],
    ['a2','h2','o2','p2']
];
var converted_arr = {
    'a1':{
        'b1':['c1','d1'],
        'e1':['i1','j1'],
        'f1':['k1','l1'],
        'g1':['m1','n1'],
        'h1':['o1','p1'],
    },
    'a2':{
        'b2':['c2','d2'],
        'e2':['i2','j2'],
        'f2':['k2','l2'],
        'g2':['m2','n2'],
        'h2':['o2','p2'],
    }
};
正如您所看到的,第一个数组(arr)的所有项都是数组,并且这些数组中的项是字符串或数字,或者两者都是。
我尝试过的一个例子如下:

var obj = {};
$.each(arr,function(a)
{
    obj[a[0]][a[1]] = a.slice(2);
});
但它什么也不产生。

有人能帮我吗?

使用Lodash库中的reduce,您可以执行以下操作,
arr
是您的输入数组

.reduce(arr,function(acc,val){var k1=val[0],k2=val[1],val=val.slice(2);acc[k1]=acc[k1]|{};acc[k1][k2]=val;return acc;},{})

您可以这样使用:

var-arr=[
[a1'、'b1'、'c1'、'd1'],
[a1'、'e1'、'i1'、'j1'],
[a1'、'f1'、'k1'、'l1'],
['a1'、'g1'、'm1'、'n1'],
['a1','h1','o1','p1'],
['a2'、'b2'、'c2'、'd2'],
['a2'、'e2'、'i2'、'j2'],
['a2'、'f2'、'k2'、'l2'],
['a2'、'g2'、'm2'、'n2'],
['a2','h2','o2','p2']
];
const newArray=arr.reduce((acc[key,key2,…rest])=>{
acc[键]=acc[键]|{};
acc[键][键2]=休息
返回acc;
}, {})

log(newArray)
下面是一个用于列表列表的简单示例(根据您的示例),叶数组的最小大小作为参数传递(在您的示例中设置为2)

映射提取一个键并累加数组,而规范化递归地减少数组,直到达到满意的结果

var-arr=[
[a1'、'b1'、'c1'、'd1'],
[a1'、'e1'、'i1'、'j1'],
[a1'、'f1'、'k1'、'l1'],
['a1'、'g1'、'm1'、'n1'],
['a1','h1','o1','p1'],
['a2'、'b2'、'c2'、'd2'],
['a2'、'e2'、'i2'、'j2'],
['a2'、'f2'、'k2'、'l2'],
['a2'、'g2'、'm2'、'n2'],
['a2','h2','o2','p2']
];
日志(转换(arr,2));
函数转换(输入,最小值){
返回normalize(映射(输入,{}),minSize);
功能图(输入、结果){
对于(变量ii=0;ii如果(list.length==1&&first.length您的思路是正确的。只是函数用法错误。我重新使用了代码并对其进行了更新,使其工作正常。对于$。每个函数,第一个值是索引(),这是错误的主要原因

我已经更新了代码,效果很好

var-arr=[
[a1'、'b1'、'c1'、'd1'],
[a1'、'e1'、'i1'、'j1'],
[a1'、'f1'、'k1'、'l1'],
['a1'、'g1'、'm1'、'n1'],
['a1','h1','o1','p1'],
['a2'、'b2'、'c2'、'd2'],
['a2'、'e2'、'i2'、'j2'],
['a2'、'f2'、'k2'、'l2'],
['a2'、'g2'、'm2'、'n2'],
['a2','h2','o2','p2']
];
obj={}
$。每个(arr,功能(索引)
{
obj[arr[index][0]]=obj[arr[index][0]]|{
obj[arr[index][0]][arr[index][1]]=arr[index].slice(2);
});
console.log(obj)

<代码> >代码>请将您所尝试的代码张贴。您的确切位置在哪里?下面请回答。请仔细考虑变量命名。<代码>转换码ARR < /代码>是一个很差的选择,因为<代码> ARR 表明当它实际上是一个对象时,该值是一个数组。<代码>转换< /COD>将是一个很差的选择,因为它是必需的。毫无意义。请选择一个能表明最终解决方案的目的/意义的名称。祝你好运!@Sunil示例!希望你能帮我解决这个问题!你建议的是OP没有提到的库,而且,现在大多数现代浏览器都可以使用这个库,没有库。Darren同意,但是OP没有唉,他瞄准的是一个现代浏览器,lodash无处不在,所以他可能已经在使用它了,他会发现一个有用的库,如果他还没有意识到的话,这将对他有好处。所以我选择了更安全、可能更具教育性的版本。不过,最近的JS的表现力是一种乐趣!