Подтвердить что ты не робот

Lodash - проект/преобразование объекта в массив значений ключа

Я собираюсь использовать forOwn для итерации свойств объекта и создания массива вручную и не могу помочь думать, что он уже доступен для этого.

{ 
  prop1 : "value",
  prop2: { sub:1}
}

в

[ 
   {key: "prop1", value: "value"},
   {key: "prop2", value: {sub:1}}
]

Спасибо

4b9b3361

Ответ 1

Вы можете использовать lodash _.map() с сокращенными именами свойств:

const obj = { 
  prop1 : "value",
  prop2: { sub:1}
};

const result = _.map(obj, (value, prop) => ({ prop, value }));

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

Ответ 2

Вам даже не нужен lodash для этого:

var arr = Object.keys(obj).map(function(key){
  return { key: key, value: obj[key] };
});

Ответ 3

Немного ES6:

_.map( obj, (value, key) => ({key,value}) )

Ответ 4

Вы можете использовать pairs, если он подходит вашему делу:

_.pairs({ 'barney': 36, 'fred': 40 });
// → [['barney', 36], ['fred', 40]]

Ссылка: https://lodash.com/docs#pairs

Ответ 5

Если вы используете lodash/fp, вы можете использовать _.entries

const a = { one: 123, two: { value: 'b' }};

const pairs = _.entries(a).map(p => ({ key:p[0], value: p[1] }))

console.log(pairs)
// [
//   {
//     "key": "one",
//     "value": 123
//   },
//   {
//     "key": "two",
//     "value": {
//       "value": "b"
//     }
//   }
// ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash-fp/4.15.0/lodash-fp.js"></script>

Ответ 6

В ответ на комментарий Ori и за полноту я опубликовал версию _.forOwn. Это немного быстрее, но вам нужно сначала объявить массив (не-один-лайнер).

var arr = [];
_.forOwn(obj,function(item, key) {
    arr.push({ property : key, value : item});
});