如何使用 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);
我想将下面的数据集数组转换成不同的格式。目前,数组中的每个字典都有 '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);