web-dev-qa-db-ja.com

ES6はlodash _.mapValuesと同等

Lodash _.mapValuesをES6に変換するさまざまな方法は何ですか?.

コード:

var fruits= {
  'Apple':    { 'name': 'Apple',    'number': 5},
  'orange': { 'name': 'orange', 'number': 10 }
};

_.mapValues(fruits, 'number');

出力:

{ 'Apple': 5, 'orange': 10 }
6
aadhira

reduceオブジェクトのentriesを別のオブジェクトに変換し、値からnumberのみを抽出します。

var fruits= {
  'Apple':    { 'name': 'Apple',    'number': 5},
  'orange': { 'name': 'orange', 'number': 10 }
};

console.log(Object.entries(fruits)
  .reduce((a, [key, { number }]) => {
    a[key] = number;
    return a;
  }, {}
));
6

for..inループを使用して、古いオブジェクトから新しいオブジェクトにキーと値を追加できます

var fruits = {
  'Apple': {
    'name': 'Apple',
    'number': 5
  },
  'orange': {
    'name': 'orange',
    'number': 10
  }
};

let newObj = {};

for (let keys in fruits) {
  newObj[keys] = fruits[keys].number;
}

console.log(newObj)
1
brk

Array.reduceObject.entries および Object.assign を使用します

var fruits= {'Apple':    { 'name': 'Apple',    'number': 5},'orange': { 'name': 'orange', 'number': 10 }};
let result = Object.entries(fruits).reduce((a,[k,{number}]) => Object.assign(a, {[k]:number}), {});
console.log(result);
0
Nikhil Aggarwal

ES6

Object.keys() および reduce() を使用して必要な結果を取得することもできます。

[〜#〜]デモ[〜#〜]

var fruits= {
  'Apple':    { 'name': 'Apple',    'number': 5},
  'orange': { 'name': 'orange', 'number': 10 }
};


let result = Object.keys(fruits).reduce((r,v)=>Object.assign(r,{[v]:fruits[v].number}),{});

console.log(result);
.as-console-wrapper {max-height: 100% !important;top: 0;}
0
Narendra Jadhav

以下は、他の回答の小さなフォローアップです。これにより、レデューサーはアキュムレーターオブジェクトを変更しません。

const newObject = Object.entries(fruits)
  .reduce((acc, [fruitKey, { number }]) => ({
    ...acc,
    [fruitKey]: number,
  }), {}
));

スプレッドの使用...acc構文は、reduceメソッドのためのより機能的なプログラミングスタイルのアプローチです。

0
Antonio Kaplan