次のコレクションがあります。
var columns = [
{ key:'url', width:20, type:'text' },
{ key:'title', width:21, type:'text' },
{ key:'desc', width:22, type:'text' },
{ key:'domain', width:23, type:'text' },
{ key:'user', width:24, type:'text' }
];
私は、選択されたキーを持つオブジェクトの配列をマップする方法を探しています。
_.mapPick(columns, [width])
// [{width:20},{width:21},{width:22},{width:23},{width:24}]
このようにlo-dashを拡張できることを知っています。
_.mixin({
mapPick: mapPick:function (objs,keys){
return _.map(objs, function (obj) {
return _.pick(obj,keys)
})
}
});
欠けているネイティブ関数があるかどうかはわかりません。
同様の質問を見つけました here ですが、もっとローダッシュのネイティブな方法を探しています。
私の場合、型へのキャストも必要です。問題は、TSコンパイラがAdam Boduchソリューションがブール値を返すことを表しているため、これを行う簡単な方法を見つけることです。
__.map(columns, item => { return { key: item.key } });
_
この場合、いくつかの新しいプロパティを追加することもできます。
追伸コメントを投稿できないので、ここにpartialRightの使用法に関する説明を追加します。
__.map(columns, _.partialRight(_.pick, 'key'));
_
最初 uを呼び出す場合_.map(array, func)
funcはすべての配列要素に対して呼び出されます。したがって、等しい:_.map(array, item => func(item))
。
Second呼び出しの結果partialRightは関数newFunc、したがって、Adamのコードを次のように表すことができます。
_var newFunc = _.partialRight(_.pick, 'key');
_.map(array, item => newFunc(item));
_
ThirdnewFuncロジックを次のように表すことができます:
_function newFunc(item) {
return _.pick(item, 'key')
}
_
最後にこの問題の最も理解しやすく、読みやすい解決策は次のとおりです。
__.map(columns, item => _.pick(item, 'key'))
_
map examples でより簡単な解決策を見つけました。
var users = [
{name:'David',age:35},
{name:'Kate',age:28},
];
_.map(users,'age'); // [35,28]
あなたができるキーの1つだけが必要な場合:
_.map(collection, 'key')
あなたの例:
var columns = [
{ key:'url', width:20, type:'text' },
{ key:'title', width:21, type:'text' },
{ key:'desc', width:22, type:'text' },
{ key:'domain', width:23, type:'text' },
{ key:'user', width:24, type:'text' }
];
var widths = _.map(columns, 'width');
widths
[20, 21, 22, 23, 24]
ES6 destructuring および arrow functions を使用すると、次のようにできます。
columns.map(({width}) => ({width}))
ロダッシュは必要ありません。