有哪些不同的方法可以将 lodash 的 _.mapValues 转换为 ES6。
代码:
var fruits= {
'apple': { 'name': 'apple', 'number': 5},
'orange': { 'name': 'orange', 'number': 10 }
};
_.mapValues(fruits, 'number');
输出:
{ 'apple': 5, 'orange': 10 }
有哪些不同的方法可以将 lodash 的 _.mapValues 转换为 ES6。
代码:
var fruits= {
'apple': { 'name': 'apple', 'number': 5},
'orange': { 'name': 'orange', 'number': 10 }
};
_.mapValues(fruits, 'number');
输出:
{ 'apple': 5, 'orange': 10 }
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;
}, {}
));
Object.fromEntries
来将映射到一个键值对数组的数组,使它更加优美。
var fruits= {
'apple': { 'name': 'apple', 'number': 5},
'orange': { 'name': 'orange', 'number': 10 }
};
console.log(Object.fromEntries(
Object.entries(fruits).map(([key, { number }]) => [key, number])
));
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)
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);
你也可以使用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;}
const newObject = Object.entries(fruits)
.reduce((acc, [fruitKey, { number }]) => ({
...acc,
[fruitKey]: number,
}), {}
));
使用展开运算符...acc
语法是reduce方法的更函数式编程风格的一种方法。