Javascript 减少数组以更改内容

Javascript 减少数组以更改内容,javascript,arrays,ecmascript-6,array-reduce,Javascript,Arrays,Ecmascript 6,Array Reduce,如何使用array.reduce更改数组内容的显示方式。我不想对内容做任何数学运算 原始阵列: var myArray = [ {id:1, name:'name01', value:11}, {id:2, name:'name02', value:22}, {id:3, name:'name03', value:33}, {id:4, name:'name04', value:44}, {id:5, name:'name05', value:55} ]

如何使用array.reduce更改数组内容的显示方式。我不想对内容做任何数学运算

原始阵列:

var myArray = [
    {id:1, name:'name01', value:11},
    {id:2, name:'name02', value:22},
    {id:3, name:'name03', value:33},
    {id:4, name:'name04', value:44},
    {id:5, name:'name05', value:55}
]
我希望将其更改为:

[
    {1:{id:1, name:'name01', value:11}},
    {2:{id:2, name:'name02', value:22}},
    {3:{id:3, name:'name03', value:33}},
    {4:{id:4, name:'name04', value:44}},
    {5:{id:5, name:'name05', value:55}}
]
因此,id作为键和值从对象中弹出,它是整个对象

仅使用array.reduce而不使用任何for循环或groupBy可以实现这一点吗?

您最好使用,因为数组中的每个项都需要一个新对象

var数组=[{id:1,name:'name01',value:11},{id:2,name:'name02',value:22},{id:3,name:'name03',value:33},{id:4,name:'name04',value:44},{id:5,name:'name05',value:55}], 结果=array.mapa=>{[a.id]:a}; console.logresult; .as控制台包装{max height:100%!important;top:0;}您可以使用.map代替ES6计算属性名,如下所示:

var myArray=[ {id:1,名称:'name01',值:11}, {id:2,name:'name02',value:22}, {id:3,name:'name03',value:33}, {id:4,name:'name04',value:44}, {id:5,名称:'name05',值:55} ]; var result=myArray.mapelem=>{[elem.id]:elem}; console.logresult var myArray=[ {id:1,名称:'name01',值:11}, {id:2,name:'name02',value:22}, {id:3,name:'name03',value:33}, {id:4,name:'name04',value:44}, {id:5,名称:'name05',值:55} ]; 让result=myArray.mapx=>{[x.id]:x};
console.logresult您没有减少任何内容,因此尝试array.reduce也没有意义

您可以使用array.map并非常轻松地执行此操作

var myArray=[ {id:1,名称:'name01',值:11}, {id:2,name:'name02',value:22}, {id:3,name:'name03',value:33}, {id:4,name:'name04',value:44}, {id:5,名称:'name05',值:55} ] var newArray=myArray.mapfunctionval{return{[val.id]:val};
console.lognewArray;拥有一堆对象是不寻常的,每个对象都有一个唯一的键。你确定这就是你需要的?你可以这么做,但为什么?myArray[0]。名称变为myArray[0]。1.name,呃。我仍然不喜欢它,但使用react-redux更容易分派操作。从那以后,我一直坚持使用这种语法。我正在学习array.reduce并试图找到复杂的示例/答案,以便更好地理解它。如果您能为我指出JS/Mozilla官方版本以外的内容,我将不胜感激。谢谢。这回答了我的好奇心。。我一直在想怎么做。。甚至无法形成蓝图。。谢谢这是最接近于使用reduce的地方。@Somename我添加了ES5语法,以便您可以更清楚地看到发生了什么。ES6版本简洁明了,但如果您仍在学习,则可能有点难以理解正在发生的事情。老实说,即使是一个训练有素的人,ES5语法也更容易查看,并且直观地知道ES5语法的运行情况。。一个问题。为什么id在弹出时显示为带引号的字符串。这是一个数字。@Somename它取决于您使用的控制台。有些人用绳子吐出来,有些人不吐。除非以JSON格式显式输出,否则没有标准确定如何输出对象。输出时,无效的属性名(即包含破折号、空格等)将始终包装为字符串,但有效的属性名可能不会。我相信它们以字符串属性名的形式存储在对象内部,但可能需要有人检查一下。i、 e.Object.keysobj将始终为您提供字符串或符号数组-任何其他类型的对象键始终为字符串。谢谢。然而,这是纯粹的地图。我在找一些有降价的东西。当然不会在prod中使用。但是我很好奇知道它。不知道你为什么不赞成使用concat。在功能范式中,纯度和非破坏性方法总是首选。@mhodges,不,一点也不,但在这种特殊情况下,地图是首选工具。@NinaScholz,是的,我同意。