У меня есть массив вида:
[
{
foo:{
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
]
Я хочу получить массив вида:
[
{
name: 'One',
value: 10
},
{
name: 'Two',
value: 20
}
]
Могу ли я преобразовать его с помощью карты, например? Или мне нужен другой способ?
4 ответа
Вы можете использовать Object.values() a> вместе с Array.flatMap()< /a> чтобы получить требуемый результат:
let arr = [
{
foo:{
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
]
let result = arr.flatMap(obj => Object.values(obj));
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Object.values
можно использовать и так arr.flatMap(Object.values)
Функция flatMap поддерживается не всеми версиями, вы можете проверить это
Вы можете попробовать эту функцию с примером поддерживаемых методов массива:
function transform(arr) {
let empty = [];
arr.forEach(obj => {
const secondArr = Object.entries(obj);
empty.push(...secondArr.map(arr => arr[1]));
});
return empty;
}
Вот пример в JSFiddle PlayGround
РЕДАКТИРОВАТЬ: я видел, что вы исправили исходное сообщение, и этот ответ больше не актуален, потому что массив, который, я думаю, вы хотели определить, не тот, который вы действительно хотели. Я оставлю свой первоначальный ответ в образовательных целях, но для ответа на ваш вопрос я бы рекомендовал проверить ответ @terry-lennox https:// stackoverflow.com/a/70770819/12166040
Первый указанный вами массив недействителен: это будет означать, что оба элемента имеют следующую форму:
foo: {
name: 'One',
value: 10
}
Это недопустимый элемент. Я предполагаю, что вы имели в виду, что каждый элемент должен быть самим объектом, например:
{
foo: {
name: 'One',
value: 10
}
}
Итак, исходный массив должен быть:
[{
foo: {
name: 'One',
value: 10
}
}, {
bar: {
name: 'Two',
value: 20
}
}]
Имея это, ваша цель — получить объект первого ключа в каждом элементе массива. Вы можете сделать это следующим образом:
yourArray.map(item => item[Object.keys(item)[0]]);
map()
вернет новый массив, запустив свой функциональный параметр для каждого элемента yourArray
. И функция, указанная внутри map()
, просто возвращает то, что находится внутри первого ключа каждого элемента.
Ты можешь использовать
let data = [
{
foo: {
name: 'One',
value: 10
},
bar: {
name: 'Two',
value: 20
}
}
];
console.log(
Object.values(data).map(i => {
return Object.values(i);
}).flat()
);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.
Object.entries