这里是猫品种的对象,以及每种猫的数量:
假设我想计算所有猫的总数。 我将使用
但是要从上面的对象创建一个数组,我有两个选项:
什么情况下我会选择其中一个而不是另一个?这里有哪些最佳实践?
const cats = {
abyssinian: {
number: 23
},
persian: {
number: 12
},
siamese: {
number: 7
}
};
假设我想计算所有猫的总数。 我将使用
reduce
来计算数组值的总和。但是要从上面的对象创建一个数组,我有两个选项:
// object
const cats = { abyssinian: { number: 23 }, persian: { number: 12 }, siamese: { number: 7 } };
// sum array values with reduce
const total = numbers => numbers.reduce((acc, cur) => acc + cur);
// 1.
// create array with Object.keys()
const numbersByKeys = Object.keys(cats).map(breed => cats[breed].number);
console.log(`Sum with Object.keys(): ${total(numbersByKeys)}`);
// 2.
// create array with Object.values()
const numbersByValues = Object.values(cats).map(breed => breed.number);
console.log(`Sum with Object.values(): ${total(numbersByValues)}`);
.keys
往往更快。但我记得它也取决于浏览器(但这似乎很奇怪?我不知道TBH),所以我会选择感觉更自然的方式。在我的例子中,我根本不需要键(只需要每个猫的数量),所以我会选择.values
。 - Robin Métral