Javascript 减少JS中的对象错误行为?
我使用以下方法:Javascript 减少JS中的对象错误行为?,javascript,typescript,Javascript,Typescript,我使用以下方法: const data = this.forms.reduce((accumulator, current) => { return (accumulator[current.name] = current.value); } }, {}); 其中,此.forms为: [ {value: {document: "fsfsf", seria: "fsfsfsf"}, "name": "Form1"}, {value: {seria: "A
const data = this.forms.reduce((accumulator, current) => {
return (accumulator[current.name] = current.value);
}
}, {});
其中,此.forms
为:
[
{value: {document: "fsfsf", seria: "fsfsfsf"}, "name": "Form1"},
{value: {seria: "AA", age: "45"}, "name": "Form2"},
{value: {marry: "yes", hobby: "AAA"}, "name": "Form3"}
]
我需要建立这个结果:
{
"Form1": {document: "fsfsf", seria: "fsfsfsf"},
"Form2": {seria: "AA", age: "45"},
"Form3": {marry: "yes", hobby: "AAA"}
}
但我得到了错误的结果:
{
{document: "fsfsf", seria: "fsfsfsf"},
"Form2": {}
}
我不明白为什么?对的累加器的回调函数必须返回累加器以应用于数组中的后续元素。返回赋值表达式的结果将返回表达式的结果(在本例中为当前值),而不是累加器
const forms=[
{值:{文档:“fsf”,序列号:“fsf”},名称:“'Form1”},
{值:{seria:“AA”,年龄:“45”},姓名:“Form2”},
{价值:{marry:“yes”,hobby:“AAA”},name:“Form3”}
];
const data=forms.reduce((累加器,当前)=>{
累加器[当前.name]=当前.value;
回流蓄能器;
}, {});
控制台日志(数据)代码>非常感谢,我可以使用{…累加器}立即返回值并得到相同的结果吗?当然,您可以这样做,但这比在整个过程中传递相同的对象引用效率要低。创建对象很昂贵。像这样返回{…累加器,…[current.name]=current.formGroup.value};`?如果只是对同一对象进行变异,为什么要使用reduce()
?如果forEach()
更适合并且更容易理解,则似乎不必要地复杂和冗余。您也可以使用forEach
,但reduce的目的正是您所说的:为数组中的每个元素变异累加器forEach
可能被认为不太合适,因为它不纯净(在其自身回调之外变异状态)。在JS函数数组方法的层次结构中,forEach
是最通用的,其中reduce
是forEach
的特例,map
和filter
是reduce
的特例。