Javascript 如何使reduce将所有项添加到数组中?
我有一个数据文件,我必须使用reduce()方法将其转换为另一种格式,我已经编写了代码,但没有添加所有的项 数据文件: data.txtJavascript 如何使reduce将所有项添加到数组中?,javascript,node.js,functional-programming,Javascript,Node.js,Functional Programming,我有一个数据文件,我必须使用reduce()方法将其转换为另一种格式,我已经编写了代码,但没有添加所有的项 数据文件: data.txt Joey Pizza 2 Joey Sandwich 1 Joey Burger 2 Chandler Pizza 1 Chandler Sandwich 0 Chandler Burger 1 { "Joey": [ { "Ordername": "Pizza"
Joey Pizza 2
Joey Sandwich 1
Joey Burger 2
Chandler Pizza 1
Chandler Sandwich 0
Chandler Burger 1
{
"Joey": [
{
"Ordername": "Pizza",
"Quantity": "2"
},
{
"Ordername": "Sandwich",
"Quantity": "1"
},
{
"Ordername": "Burger",
"Quantity": "2"
}
],
"Chandler": [
{
"Ordername": "Pizza",
"Quantity": "1"
},
{
"Ordername": "Sandwich",
"Quantity": "0"
},
{
"Ordername": "Burger",
"Quantity": "1"
}
]
}
预期结果
Joey Pizza 2
Joey Sandwich 1
Joey Burger 2
Chandler Pizza 1
Chandler Sandwich 0
Chandler Burger 1
{
"Joey": [
{
"Ordername": "Pizza",
"Quantity": "2"
},
{
"Ordername": "Sandwich",
"Quantity": "1"
},
{
"Ordername": "Burger",
"Quantity": "2"
}
],
"Chandler": [
{
"Ordername": "Pizza",
"Quantity": "1"
},
{
"Ordername": "Sandwich",
"Quantity": "0"
},
{
"Ordername": "Burger",
"Quantity": "1"
}
]
}
我写的代码是:
code.js
const fs = require('fs');
var output = fs
.readFileSync('data.txt', 'utf8')
.trim()
.split('\n')
.map((line) => line.split(' '))
.reduce((acc, item) => {
acc[item[0]] = [];
acc[item[0]].push({ Ordername: item[1], Quantity: item[2] });
return acc;
}, {});
console.log(JSON.stringify(output, null, 2));
在运行上述代码时,将给出此结果:
{
"Joey": [
{
"Ordername": "Burger",
"Quantity": "2\r"
}
],
"Chandler": [
{
"Ordername": "Burger",
"Quantity": "1"
}
]
}
为什么它只在数组中添加第三项而不是全部三项 这是因为您总是使用以下名称覆盖密钥:
acc[项目[0]]=[]代码>
相反,你应该这样做
if(!acc[item[0]]) {
acc[item[0]] = []
}
acc[item[0]].push(...)
此acc[项目[0]]=[]代码>应该是acc[item[0]]=acc[itiem[0]]| |[]
虽然您的解决方案是正确的,但这可以是一个快捷方式:acc[item[0]]=acc[itiem[0]]| |[]
如果您正在寻找一个简短的解决方案,那么是的,也可以