将数组转换为包含对象的数组
turning an array into an array with objects
我一直在想办法把一个数组变成一个包含对象的数组。
例如,我有一个 json 文件开始,json 文件看起来像这样
var data=[{"tasknumber":304030,
"date":"2012-05-05",
"operator":"john doe"},
{"tasknumber":23130,
"date":"2012-07-07",
"operator":"john doeeeeeeee"},
{"tasknumber":233330,
"date":"2012-08-08",
"operator":"john doe"}]
所以我应用了 underscore.js 库中的 _.countBy 函数,我得到了一个像这样的对象
{"john doe":2,"john doeeeeeeee":1}
我一直在想办法把它变成一个带有对象的数组,所以它看起来像这样,但我每次尝试都失败了,我不知道该从哪里开始
[{operator:"john doe",
count: 2},
{operator: "john doeeeeeeee",
count:1}]
我已经尝试了一些方法,但我得到的只是悲剧,一切都坏了,有谁知道是否有任何图书馆或任何东西可以帮助解决这类问题?
给定 object(不是数组){"john doe":2,"john doeeeeeeee":1}
作为输入,你可以像这样得到你想要的输出:
var input = {"john doe":2,"john doeeeeeeee":1};
var output = Object.keys(input).map(function(k) {
return {
operator: k,
count: input[k]
};
});
console.log(output);
或者用 ES6 箭头函数语法:
var input = {"john doe":2,"john doeeeeeeee":1};
var output = Object.keys(input).map((k) => ({ operator: k, count: input[k] }) );
console.log(output);
(请注意,Underscore 可能提供了一种更短的方法来执行此操作,但我对 Underscore 不熟悉,所以我只给出了一个普通的 JS 解决方案。)
进一步阅读:
给定你的初始数据数组,你可以运行这样:
var data=[{"tasknumber":304030,
"date":"2012-05-05",
"operator":"john doe"},
{"tasknumber":23130,
"date":"2012-07-07",
"operator":"john doeeeeeeee"},
{"tasknumber":233330,
"date":"2012-08-08",
"operator":"john doe"}];
函数定义
const count = data => {
// get data in format like _.countBy
const o = data.map(x => x.operator).reduce((acc, cur) => { acc[cur] ? acc[cur] += 1 : acc[cur] = 1; return acc; }, {});
// transform object into array of object
return Object.keys(o).map(operator => ({operator, count: o[operator]}));
};
通过生成输出来测试它
console.log(count(data));
这是一种未经测试的下划线方法,它采用从 JSON 文件加载的初始值并直接转换为所需的输出格式:
_.chain(input)
.groupBy(function(entry) { return entry.operator })
.map(function(entries, operator) {
return {
operator: operator,
count: entries.length
}
})
.value();
我一直在想办法把一个数组变成一个包含对象的数组。
例如,我有一个 json 文件开始,json 文件看起来像这样
var data=[{"tasknumber":304030,
"date":"2012-05-05",
"operator":"john doe"},
{"tasknumber":23130,
"date":"2012-07-07",
"operator":"john doeeeeeeee"},
{"tasknumber":233330,
"date":"2012-08-08",
"operator":"john doe"}]
所以我应用了 underscore.js 库中的 _.countBy 函数,我得到了一个像这样的对象
{"john doe":2,"john doeeeeeeee":1}
我一直在想办法把它变成一个带有对象的数组,所以它看起来像这样,但我每次尝试都失败了,我不知道该从哪里开始
[{operator:"john doe",
count: 2},
{operator: "john doeeeeeeee",
count:1}]
我已经尝试了一些方法,但我得到的只是悲剧,一切都坏了,有谁知道是否有任何图书馆或任何东西可以帮助解决这类问题?
给定 object(不是数组){"john doe":2,"john doeeeeeeee":1}
作为输入,你可以像这样得到你想要的输出:
var input = {"john doe":2,"john doeeeeeeee":1};
var output = Object.keys(input).map(function(k) {
return {
operator: k,
count: input[k]
};
});
console.log(output);
或者用 ES6 箭头函数语法:
var input = {"john doe":2,"john doeeeeeeee":1};
var output = Object.keys(input).map((k) => ({ operator: k, count: input[k] }) );
console.log(output);
(请注意,Underscore 可能提供了一种更短的方法来执行此操作,但我对 Underscore 不熟悉,所以我只给出了一个普通的 JS 解决方案。)
进一步阅读:
给定你的初始数据数组,你可以运行这样:
var data=[{"tasknumber":304030,
"date":"2012-05-05",
"operator":"john doe"},
{"tasknumber":23130,
"date":"2012-07-07",
"operator":"john doeeeeeeee"},
{"tasknumber":233330,
"date":"2012-08-08",
"operator":"john doe"}];
函数定义
const count = data => {
// get data in format like _.countBy
const o = data.map(x => x.operator).reduce((acc, cur) => { acc[cur] ? acc[cur] += 1 : acc[cur] = 1; return acc; }, {});
// transform object into array of object
return Object.keys(o).map(operator => ({operator, count: o[operator]}));
};
通过生成输出来测试它
console.log(count(data));
这是一种未经测试的下划线方法,它采用从 JSON 文件加载的初始值并直接转换为所需的输出格式:
_.chain(input)
.groupBy(function(entry) { return entry.operator })
.map(function(entries, operator) {
return {
operator: operator,
count: entries.length
}
})
.value();