Javascript 动态地从对象数组中提取关键点并转换为对象数组

Javascript 动态地从对象数组中提取关键点并转换为对象数组,javascript,arrays,object,Javascript,Arrays,Object,我有一个具体的案例,我甚至不知道这是否可能实现 给定输入数组 var originalArr = [ [ { ID: 3, name: 'Beef' }, { ID: 4, name: 'Macaroni' }, { ID: 5, name: 'Sauce#1' } ], [{ ID: 1, name: 'Lettuce' }, { ID: 2, name: 'Brocoli' }] ]; 我想迭代内部数组,从对象中选取ID,然后创建一个新的ID来代替数组。

我有一个具体的案例,我甚至不知道这是否可能实现

给定输入数组

var originalArr = [
  [
    { ID: 3, name: 'Beef' },
    { ID: 4, name: 'Macaroni' },
    { ID: 5, name: 'Sauce#1' }
  ],
  [{ ID: 1, name: 'Lettuce' }, { ID: 2, name: 'Brocoli' }]
];
我想迭代内部数组,从对象中选取ID,然后创建一个新的ID来代替数组。所以我的输出应该是这样的

var output = [
  {
    '1': {
      name: 'Lettuce',
      ID: 1
    },
    '2': {
      name: 'Brocoli',
      ID: 2
    }
  },
  {
    '3': {
      name: 'Beef',
      ID: 3
    },
    '4': {
      name: 'Macaroni',
      ID: 4
    },
    '5': {
      name: 'Sauce#1'
    }
  }
];

使用
map
在内部数组上迭代很容易,但是如何创建新的
对象来代替数组并动态提取其键值呢?甚至有可能在我输入的情况下产生所需的输出。

使用
map
reduce

originalArr.map( s => //iterate outer array
    s.reduce( (acc, c) => (  //iterate inner array using reduce
       acc[c.ID] = c, acc  //assign the id as key to accumulator and return the accumulator
    ) , {}) //initialize accumulator to {}
)
演示

var originalArr=[
[
{ID:3,名字:'牛肉'},
{ID:4,名称:'通心粉'},
{ID:5,名字:'sause#1'}
],
[{ID:1,名称:'莴苣'},{ID:2,名称:'Brocoli'}]
];
var output=originalArr.map(s=>s.reduce((acc,c)=>(acc[c.ID]=c,acc),{});

控制台日志(输出)使用
map
reduce

originalArr.map( s => //iterate outer array
    s.reduce( (acc, c) => (  //iterate inner array using reduce
       acc[c.ID] = c, acc  //assign the id as key to accumulator and return the accumulator
    ) , {}) //initialize accumulator to {}
)
演示

var originalArr=[
[
{ID:3,名字:'牛肉'},
{ID:4,名称:'通心粉'},
{ID:5,名字:'sause#1'}
],
[{ID:1,名称:'莴苣'},{ID:2,名称:'Brocoli'}]
];
var output=originalArr.map(s=>s.reduce((acc,c)=>(acc[c.ID]=c,acc),{});

控制台日志(输出)您可以使用纯javascript实现递归

var originalArr = [
        [{
            ID: 3,
            name: 'Beef'
        }, {
            ID: 4,
            name: 'Macaroni'
        }, {
            ID: 5,
            name: 'Sauce#1'
        }],
        [{
            ID: 1,
            name: 'Lettuce'
        }, {
            ID: 2,
            name: 'Brocoli'
        }]
    ]

    function bindInObject(object, array) {
        for (var i = 0; i < array.length; i++) {
            var it = array[i];
            if (it instanceof Array) {
                bindInObject(object, it);
            } else {
                var id = it.ID;
                object[id] = it;
            }
        }
    }
    var output = {};

    bindInObject(output, originalArr);
    console.log(output) 
var originalArr=[
[{
ID:3,
名字:“牛肉”
}, {
ID:4,
名称:“通心粉”
}, {
ID:5,
名称:“沙司#1”
}],
[{
ID:1,
名字:“莴苣”
}, {
ID:2,
名字:“花椰菜”
}]
]
函数bindInObject(对象,数组){
对于(var i=0;i
您可以使用纯javascript实现递归

var originalArr = [
        [{
            ID: 3,
            name: 'Beef'
        }, {
            ID: 4,
            name: 'Macaroni'
        }, {
            ID: 5,
            name: 'Sauce#1'
        }],
        [{
            ID: 1,
            name: 'Lettuce'
        }, {
            ID: 2,
            name: 'Brocoli'
        }]
    ]

    function bindInObject(object, array) {
        for (var i = 0; i < array.length; i++) {
            var it = array[i];
            if (it instanceof Array) {
                bindInObject(object, it);
            } else {
                var id = it.ID;
                object[id] = it;
            }
        }
    }
    var output = {};

    bindInObject(output, originalArr);
    console.log(output) 
var originalArr=[
[{
ID:3,
名字:“牛肉”
}, {
ID:4,
名称:“通心粉”
}, {
ID:5,
名称:“沙司#1”
}],
[{
ID:1,
名字:“莴苣”
}, {
ID:2,
名字:“花椰菜”
}]
]
函数bindInObject(对象,数组){
对于(var i=0;i
常量原始数组=[
[
{ID:3,名字:'牛肉'},
{ID:4,名称:'通心粉'},
{ID:5,名字:'sause#1'}
],
[
{ID:1,名称:'莴苣'},
{ID:2,名称:'Brocoli'}
]
]
让新的_数组=[]
for(设i=0;iconst原始数组=[
[
{ID:3,名字:'牛肉'},
{ID:4,名称:'通心粉'},
{ID:5,名字:'sause#1'}
],
[
{ID:1,名称:'莴苣'},
{ID:2,名称:'Brocoli'}
]
]
让新的_数组=[]
for(设i=0;i对于(设i=0;iOne问题:在输出中,ID值为“1”和“2”的对象是第一个,但在输入数组中它是第二个。除了重新排列之外,您还想进行排序吗?不需要排序。一个问题:在输出中,ID值为“1”和“2”的对象是第一个,但在输入数组中它是第二个。除了重新排列之外,还有什么排序吗?不需要排序。