让我总结一下可能性。目标始终是将对象制作成数组。有各种各样的JavaScript对象函数可用于此。对于每个单独的函数,都有不同的解释方式。因此,它始终取决于我们的对象是什么样子以及我们想要做什么。
在上面的示例中,这是一个具有三个对象的对象。
const obj = {
a: {value: 1},
b: {value: 2},
c: {value:3}
};
使用Object.keys
Object.keys方法只返回对象的键(key)。
const arr = Object.keys(obj);
[a, b, c]
const result = arr.reduce((total, key) => {
return sum + obj[key].value;
}, 0);
使用Object.value
Object.value() 方法返回数组中的每个值。
const arr = Object.value(obj);
[
{value: 1},
{value: 2},
{value: 3},
]
const result = arr.reduce((total, singleValue) => {
return total + singleValue.value;
}, 0);
const resultShort = Object.values(obj).reduce((t, n) => t + n.value, 0)
使用Object.entries
Object.entries将每个单独的对象值拆分为一个数组。
const arr = Object.entries(obj)
[
["a", {visitors: 1}],
["b", {visitors: 2}],
["c", {visitors: 4}]
]
const result = arr.reduce((total, singleArr) => {
return total + singleArr[1].value;
}, 0);
无论你是使用reduce还是array函数map(),取决于你想要做什么。
Underscore.js
吗? - Sethen_
对象确实有一个用于对象的 reduce 函数。不确定它是否是偶然发生的,还是对象支持是有意为之,但确实可以像本问题的示例一样传递一个对象,并且(在概念上)会使用for..in
循环,在每个键处调用您的迭代器函数并返回找到的值。 - Roatin Marth