Javascript 如何根据数组中的元素数转换为json

Javascript 如何根据数组中的元素数转换为json,javascript,node.js,Javascript,Node.js,我有以下平面阵列 let data = [ ["0000001", "PAUL", "Y", "PELUCHE", "DRAKE", "DOG"], ["0000002", "ECHEBEL", "Y", "CAT", ""], ["000000

我有以下平面阵列

let data = [
    ["0000001", "PAUL", "Y", "PELUCHE", "DRAKE", "DOG"],
    ["0000002", "ECHEBEL", "Y", "CAT", ""],
    ["0000003", "NANCY", "Y", "FERRET", "HAMSTER", ""]
]
我正在读一个.txt,其中每行有n条记录,但从逻辑上讲,我需要转换为json,因为使用key:value对我来说更容易

let orderData = data.reduce((a, b) => {
  let id = b[0]
  id = parseInt(b[0])
  let name = b[1]
  let pets = b.splice(3)

  if (!a.hasOwnProperty(id)) a[id] = {
    name: "",
    pets: []
  }

  a[id].name = name

  a[id].pets.push(...pets.filter(x => x !== ""))

  return a
}, {})
console.log(orderData)

Object.keys(orderData).forEach(key => {

let objeto = orderData[key]

objeto.pets.forEach(pet => console.log(objeto.name, pet))
})
但这是错误的,因为它不允许我将id转换为int,即使它打印了数量,它还是以平面数组的形式返回,我希望它返回类似这样的值 另外,它是从id实例化的,我如何将id也包含在同一个js对象中并执行类似的操作

期望输出:

{"id":1, "name":"PAUL","PET1":"PELUCHE"},
{"id":1, "name":"PAUL","PET2":"DRAKE"},
{"id":1, "name":"PAUL","PET3":"DOG"},
{"id":2, "name":"ECHEBEL","PET1":"CAT"},
{"id":3, "name":"NACY","PET1":"FERRET" },
{"id":3, "name":"NANCY","PET2":"HAMSTER"}
收到的输出:

{
  '1': { name: 'PAUL', pets: [ 'PELUCHE', 'DRAKE', 'DOG' ] },
  '2': { name: 'ECHEBEL', pets: [ 'CAT' ] },
  '3': { name: 'NANCY', pets: [ 'FERRET', 'HAMSTER' ] }
}
  PAUL PELUCHE
  PAUL DRAKE
  PAUL DOG
  ECHEBEL CAT
  NANCY FERRET
  NANCY HAMSTER

像这样的怎么样

let data = [
    ["0000001", "PAUL", "Y", "PELUCHE", "DRAKE", "DOG"],
    ["0000002", "ECHEBEL", "Y", "CAT", ""],
    ["0000003", "NANCY", "Y", "FERRET", "HAMSTER", ""]
];

const entries = data
  .map((n) => {
     const [id, name, flag, ...pets] = n;
    
      return [
        Number(id),
        { id, name, pets, flag }
      ];
  });
  
const result = Object.fromEntries(entries);  

console.log(result);

Object
  .entries(result)
  .forEach((kv) => {
     kv[1].pets.forEach((pet) => {
       if (pet !== "") {
         console.log(kv[1].name, pet);
       }
    });
  });

您好,我想您要求的是在对象内部添加id,您想要的结果是一个对象数组,所以我添加了一个结果变量

    let data = [
    ["0000001", "PAUL", "Y", "PELUCHE", "DRAKE", "DOG"],
    ["0000002", "ECHEBEL", "Y", "CAT", ""],
    ["0000003", "NANCY", "Y", "FERRET", "HAMSTER", ""]
]
let orderData = data.reduce((a, b) => {
  let id = b[0]
  id = parseInt(b[0])
  let name = b[1]
  let pets = b.splice(3)

  if (!a.hasOwnProperty(id)) 
  a[id] = {
    id: id,
    name: "",
    pets: []
  }

  a[id].name = name

  a[id].pets.push(...pets.filter(x => x !== ""))

  return a
}, {})
console.log("orderData")
console.log(orderData)

let result = []
Object.keys(orderData).forEach(key => {
let objeto = orderData[key]

    let i = 1
objeto.pets.forEach(pet => {
    let petNum = "PET" + i++
    let petName = pet
    
    let temp = {
        "id": objeto.id,
        "name": objeto.name,
        };
        temp[petNum] = petName
    
    result.push(temp)
    })
})
console.log(result)
输出:

{id: 1, name: "PAUL", PET1: "PELUCHE"}
{id: 1, name: "PAUL", PET2: "DRAKE"}
{id: 1, name: "PAUL", PET3: "DOG"}
{id: 2, name: "ECHEBEL", PET1: "CAT"}
{id: 3, name: "NANCY", PET1: "FERRET"}
{id: 3, name: "NANCY", PET2: "HAMSTER"}
这是我的两分钱:

函数过滤器(数组){
设a,n,o,r=[];

对于(让z=0,c=1,q=array.length;z您可以更新您的问题以包含您期望的输出吗?已编辑!brother@HanYoloSo刚刚放入
a[id].id=id
?谢谢,但第三个框中的jsonsThank brother集合是这样的,但这不是因为您将id作为标识符,也就是说,是否有其他方法可以执行此操作,以我在输出前将其放在空格中的方式返回我?@我很难理解请求。您需要打印宠物主人吗?我不需要将输出设置为“所需输出”框我不将输出设置为“所需输出”框谢谢你也更新了答案以反映预期结果W,非常感谢!!我修复了空的。