/ / Створіть два масиви з колекції властивостей об'єкта та значень з lodash - javascript, масиви, javascript-об'єкти, lodash

Створіть два масиви з колекції властивості об'єкта та значень з логоша - javascript, масивами, javascript-об'єктами, логосом

У мене є масив, який містить такі об’єкти:

[{
"first" : 1
},
{
"second" : 2
},
{
"third" : 3
}]

Я хочу перетворити це на два масиви з відповідними індексами на основі цих значень, таких як:

["first","second","third"]
[1,2,3]

Я можу перебрати це і отримати об'єктні ключі та значення, але я відчуваю, що для цього треба бути хитрим способом, який я не знаю. Будь-які пропозиції? Дякую!

Відповіді:

1 для відповіді № 1

Для рішення, що не стосується квартири:

var arr = [{"first" : 1},{"second" : 2},{"third" : 3}];
var keys = arr.map(function(el){return Object.keys(el)[0];});
var vals = arr.map(function(el){return el[Object.keys(el)[0]];});

Про протилежну проблему (кілька масивів в один масив об'єктів) див Об’єднайте два масиви в масив об'єктів зі значеннями властивостей


3 для відповіді № 2

Здається, вам просто потрібно відобразити карту над об’єктом і зателефонувати ключі () і значення ()

Ви отримаєте перший масив на зразок:

var items = [{a: "1"},{b: "blah",c: "what"},{d: "3"}]
keys = _(items).map(_.keys).flatten().value()

повертає ["a","b","c","d"]

А другий масив типу:

values = _(items).map(_.values).flatten().value()

повертає ["1","blah","what","3"]


0 для відповіді № 3

Якщо припустити, що форма вашого об'єкта є завжди {"label": value}, тоді ви можете використовувати цю ванільну JavaScript:

var data = [{"first" : 1},{"second" : 2},{"third" : 3}];
var labels = data.map(function(entry) {
return Object.keys(entry)[0];
});
var values = data.map(function(entry) {
return entry[Object.keys(entry)[0]];
});

Ваша структура даних здається неоптимальною на основі ваших коментарів. Я рекомендую альтернативну структуру:

var data = [
{"label": "first", "value": 1},
{"label": "second", "value": 2},
{"label": "third", "value": 3}
]

Тоді тривіально, щоб виділити мітки та значення на окремі частини у звичайному JavaScript:

var labels = data.map(function(entry) {
return entry.label;
});
var values = data.map(function(entry) {
return entry.value;
});

Або якщо ви дійсно хочете скористатися lodash:

var labels = _.pluck(data, "label");
var values = _.pluck(data, "value");

Сподіваємось, ви можете побачити, що ця переглянута структура робить JavaScript набагато простішим, використовуєте ви lodash чи ні.