Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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 如何使reduce将所有项添加到数组中?_Javascript_Node.js_Functional Programming - Fatal编程技术网

Javascript 如何使reduce将所有项添加到数组中?

Javascript 如何使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"

我有一个数据文件,我必须使用reduce()方法将其转换为另一种格式,我已经编写了代码,但没有添加所有的项

数据文件: data.txt

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]]| |[]
如果您正在寻找一个简短的解决方案,那么是的,也可以