#javascript #arrays #json #object
#javascript #массивы #json #объект
Вопрос:
У меня есть данные json в полях, которые разделены по строкам. Я хочу, чтобы все эти поля были в одной строке. Я хотел бы написать функцию javascript, которая принимает исходные входные данные и выдает выходные данные. Я очень новичок в javascript. Я хотел бы сделать это динамическим способом, чтобы мне не нужно было явно называть новые поля — вместо этого выполните итерацию по всем полям в каждой строке по одному и добавьте их в новую строку с теми же именами / значениями. Заранее спасибо.
Запуск json:
[
{
"name": "Sara Smith",
"dob": "19831002"
},
{
"title": "director",
"emails": [
"ssmith@gmail.com",
"sarasmith@yahoo.com"
]
},
{
"phones": [
{
"type": "home",
"number": "3452345432"
},
{
"type": "work",
"number": "3452345343"
}
]
}
]
Желаемое конечное состояние json:
[
{
"name": "Sara Smith",
"dob": "19831002"
"title": "director",
"emails": [
"ssmith@gmail.com",
"sarasmith@yahoo.com"
]
"phones": [
{
"type": "home",
"number": "3452345432"
},
{
"type": "work",
"number": "3452345343"
}
]
}
]
Комментарии:
1. Что вы пробовали … о, подождите, у вас уже есть ответы… вы благословлены
Ответ №1:
Используйте reduce
:
const startJSON = [{
"name": "Sara Smith",
"dob": "19831002"
},
{
"title": "director",
"emails": [
"ssmith@gmail.com",
"sarasmith@yahoo.com"
]
},
{
"phones": [{
"type": "home",
"number": "3452345432"
},
{
"type": "work",
"number": "3452345343"
}
]
}
];
const endJSON = [startJSON.reduce((acc, curr) => ({ ...acc, ...curr }))];
console.log(endJSON);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Ответ №2:
Одним из возможных решений является использование Array.reduce() в сочетании с Object.assign():
const input = [
{"name": "Sara Smith", "dob": "19831002"},
{
"title": "director",
"emails": ["ssmith@gmail.com", "sarasmith@yahoo.com"]
},
{
"phones": [
{"type": "home", "number": "3452345432"},
{"type": "work", "number": "3452345343"}
]
}
];
let output = input.reduce((acc, curr) =>
{
Object.assign(acc[0], curr);
return acc;
}, [{}]);
console.log(output);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}