ES6相当于lodash _.mapValues

时间:2018-07-18 05:10:39

标签: javascript object ecmascript-6 lodash

将lodash _.mapValues转换为ES6有哪些不同的方法。

代码:

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

_.mapValues(fruits, 'number');

输出:

{ 'apple': 5, 'orange': 10 }

5 个答案:

答案 0 :(得分:8)

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;
  }, {}
));

答案 1 :(得分:1)

您可以使用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)

答案 2 :(得分:0)

使用Array.reduceObject.entriesObject.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);

答案 3 :(得分:0)

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;}

答案 4 :(得分:0)

以下是对其他答案的一些小跟进,以使减速器不会使累加器对象发生变异。

Firestore.instance
    .collection("lists")
    .where("users", arrayContains: uid)
    .snapshots()
    .listen((data) =>
        lists = Map.fromEntries(data.documents.map((DocumentSnapshot doc) {
          return MapEntry(doc.documentID, TaskList.fromSnapshot(doc));
        })));

使用传播const newObject = Object.entries(fruits) .reduce((acc, [fruitKey, { number }]) => ({ ...acc, [fruitKey]: number, }), {} )); 语法是用于归约方法的功能更强大的编程风格方法。