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,非常感谢!!我修复了空的。