web-dev-qa-db-ja.com

lodash-オブジェクトをプロジェクト/キー値配列に変換

私はforOwnを使用してオブジェクトのプロパティを反復処理し、手動で配列を作成しようとしていますが、すでに使用可能なonelinerがあると考えることはできません。

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

に:

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

ありがとう

23
sambomartin

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>_

または、 _Object#entries_Array.map() および array destructuring を使用して実行できます。

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

const result = Object.entries(obj).map(([prop, value]) => ({ prop, value }));

console.log(result);_
31
Ori Drori

そのためにlodashも必要ありません:

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

ES6の少し:

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

10
Dzianis Sudas

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>
3

場合に応じて、pairsを使用できます。

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

参照: https://lodash.com/docs#pairs

2
Skarllot

Oriのコメントに応えて、完全を期すために、_。forOwnバージョンを投稿しました。それはわずかに高速ですが、最初に配列を宣言する必要があります(1行ではありません)。

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