如何使用 javascript (函数式编程)将某个键属性上的字典数组分组和转换为不同的格式?

How to group and transform dictionary array on a certain key attribute to a different format with javascript (functional programming)?

我想将下面的数据集数组转换成不同的格式。目前,数组中的每个字典都有 'count'、'fruit' 和 'first name'。我想为每个不同的名字和每个 'fruit' 类型的名字所具有的值创建一个新字典。

例如,下面是一些输入数据

var input_data = [{"count":1,"fruit":"apple","first_name":"abe"},{"count":1,"fruit":"apple","first_name":"bob"},{"count":10,"fruit":"banana","first_name":"bob"},{"count":5,"fruit":"cherry","first_name":"abe"}]

我们知道此数据集的类别是 ['apple'、'banana'、'cherry']

var desired_output = 
[{name: 'abe',data:[1,0,5]},
{name: 'bob',data:[1,10,0]}]

您可以使用散列 table 作为名称引用,并使用对象作为计数的正确索引。

var input_data = [{"count":1,"fruit":"apple","first_name":"abe"},{"count":1,"fruit":"apple","first_name":"bob"},{"count":10,"fruit":"banana","first_name":"bob"},{"count":5,"fruit":"cherry","first_name":"abe"}],
    categories = ['apple', 'banana', 'cherry'],
    cat = {},
    result = [];

categories.forEach(function (a, i) { cat[a] = i; });
input_data.forEach(function (a) {
    if (!this[a.first_name]) {
        this[a.first_name] = { name: a.first_name, data: categories.map(function () { return 0; }) };
        result.push(this[a.first_name]);
    }
    this[a.first_name].data[cat[a.fruit]] += a.count;
}, Object.create(null));
console.log(result);