将lodash _.mapValues转换为ES6有哪些不同的方法。
代码:
var fruits= {
'apple': { 'name': 'apple', 'number': 5},
'orange': { 'name': 'orange', 'number': 10 }
};
_.mapValues(fruits, 'number');
输出:
{ 'apple': 5, 'orange': 10 }
答案 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.reduce,Object.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);
答案 3 :(得分:0)
您还可以使用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,
}), {}
));
语法是用于归约方法的功能更强大的编程风格方法。