Я пытаюсь нажать значение из ключа, который существует в первом массиве. Этот массив состоит из массива country_users
который я зациклил на каждом массиве пользователей внутри этого объекта и country_users
их в новый массив, называемый users
В этой демонстрации я пытаюсь перенаправить country
из country_users
в каждый пользовательский объект в массиве users
.
Я использую Vue.js для этой цели, может быть, проще с Vue? Какие-либо предложения?
var users = [];
var country_users = [
{
"country": "United States",
"users": [
{
"name": "John"
},
{
"name": "Jane"
},
],
},
{
"country": "Norway",
"users": [
{
"name": "Ola"
},
{
"name": "Jens"
},
],
},
];
// Here I push all users from country_users into a new array called users
for (let cu = 0; cu < country_users.length; cu++) {
for (let u = 0; u < country_users[cu].users.length; u++) {
users.push(country_users[cu].users[u]);
}
// Do I make a new for loop here to push the country into every object inside users array? How?
}
console.log(users);
Я хочу вытолкнуть страну из массива, где раньше принадлежали пользователи.
Результат, который я хочу, представляет собой массив, подобный этому для users
var users = [
{
"name": "John",
"country": "United States"
},
{
"name": "Jane",
"country": "United States"
},
{
"name": "Ola",
"country": "Norway"
},
{
"name": "Jens",
"country": "Norway"
}
];
console.log(users);
РЕШЕНИЕ
var users = [];
var country_users = [
{
"country": "United States",
"users": [
{
"name": "John"
},
{
"name": "Jane"
},
],
},
{
"country": "Norway",
"users": [
{
"name": "Ola"
},
{
"name": "Jens"
},
],
},
];
country_users.forEach((country_user) => {
country_user.users.forEach((user) => {
user.country = country_user.country;
users.push(user);
});
});
console.log(users);
Вы можете итерировать данный массив и свой массив пользователей и построить новый массив с требуемыми свойствами.
var country_users = [{ country: "United States", users: [{ name: "John" }, { name: "Jane" }] }, { country: "Norway", users: [{ name: "Ola" }, { name: "Jens" }] }],
users = country_users.reduce(function (r, country) {
country.users.forEach(function (user) {
r.push({ name: user.name, country: country.country });
});
return r;
}, []);
console.log(users);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ES6
var country_users = [{ country: "United States", users: [{ name: "John" }, { name: "Jane" }] }, { country: "Norway", users: [{ name: "Ola" }, { name: "Jens" }] }],
users = country_users.reduce((r, { country, users }) => {
users.forEach(({ name }) => r.push({ name, country }));
return r;
}, []);
console.log(users);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Предложите использовать синтаксис ES6:
for(const country of country_users) {
for(const user of country.users) {
users.push({
...user,
country : country.country
})
}
}
пользовательский объект копируется с помощью оператора отдыха "..."
Просто добавьте страну собственности, прежде чем нажимать
var users = [];
var country_users = [
{
"country": "United States",
"users": [
{
"name": "John"
},
{
"name": "Jane"
},
],
},
{
"country": "Norway",
"users": [
{
"name": "Ola"
},
{
"name": "Jens"
},
],
},
];
// Here I push all users from country_users into a new array called users
for (let cu = 0; cu < country_users.length; cu++) {
for (let u = 0; u < country_users[cu].users.length; u++) {
var newUser = country_users[cu].users[u];
newUser.country = country_users[cu].country;
users.push(newUser);
}
// Do I make a new for loop here to push the country into every object inside users array? How?
}
console.log(users);
Вы можете использовать Array.prototype.reduce и на каждой итерации вы создаете и возвращаете новый массив с пользователями и странами:
const country_users = [
{
"country": "United States",
"users": [
{
"name": "John"
},
{
"name": "Jane"
},
],
},
{
"country": "Norway",
"users": [
{
"name": "Ola"
},
{
"name": "Jens"
},
],
},
];
const result = country_users.reduce((prev, curr) => {
const users = curr.users.map(user => ({
name: user.name,
country: curr.country
}))
return [
...prev,
...users,
]
}, [])
console.log(result)