如何在下划线中将对象分组为一个对象
How to group objects into one object in underscore
如何转换:
[
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
]
我如何分组并获取所有没有名称的对象:'no name' 作为单独的对象,如下所示:
{
0:[
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'}
],
1:[
{name: 'no name', type: 'product'},
]
}
要生成具有键 0
和 1
的对象,请使用 _.groupBy
:
var objectResult = _.groupBy(data, function(d) { return +(d.name === "no name") })
要生成一个包含两个元素的数组(也有键 0
和 1
),您可以使用 _.partition
(下划线 1.6.0 +):
partition_.partition(array, predicate)
: Split array into two arrays:
one whose elements all satisfy predicate and one whose elements all do
not satisfy predicate.
var arrayResult = _.partition(data, function(d) { return d.name !== "no name" })
你可以试试http://underscorejs.org/#groupBy:
var data = [
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
]
var results = _.groupBy(data, function(obj) { return obj.name == 'no name' ? 1 : 0; })
console.log(results)
你可以这样试试
var arr = [
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
];
var result = _.groupBy(arr, function (elem) {
return elem.name == 'no name' ? 1: 0;
});
作为比较,纯 ECMAScript 只需要多一点代码:
data.reduce(function(acc, obj) {
acc[obj.name == 'no name'? 1:0].push(obj);
return acc;},{0:[],1:[]}
);
这么简单的东西为什么要用框架?
这是一个允许正确分组的纯 JS 解决方案。
然后很容易使用结果对象。
var array=[
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'no name', type: 'product'},
];
function groupBy(propertyName, array) {
var groupedElements = {};
for (var i = 0, len = array.length; i < len; i++) {
var el = array[i];
var value = el[propertyName].trim();
var group = groupedElements[value];
if (group === undefined) {
group = [el];
groupedElements[value] = group;
} else {
group.push(el);
}
}
return groupedElements;
}
var result = groupBy('name',array);
如何转换:
[
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
]
我如何分组并获取所有没有名称的对象:'no name' 作为单独的对象,如下所示:
{
0:[
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'}
],
1:[
{name: 'no name', type: 'product'},
]
}
要生成具有键 0
和 1
的对象,请使用 _.groupBy
:
var objectResult = _.groupBy(data, function(d) { return +(d.name === "no name") })
要生成一个包含两个元素的数组(也有键 0
和 1
),您可以使用 _.partition
(下划线 1.6.0 +):
partition_.partition(array, predicate)
: Split array into two arrays: one whose elements all satisfy predicate and one whose elements all do not satisfy predicate.
var arrayResult = _.partition(data, function(d) { return d.name !== "no name" })
你可以试试http://underscorejs.org/#groupBy:
var data = [
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
]
var results = _.groupBy(data, function(obj) { return obj.name == 'no name' ? 1 : 0; })
console.log(results)
你可以这样试试
var arr = [
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
];
var result = _.groupBy(arr, function (elem) {
return elem.name == 'no name' ? 1: 0;
});
作为比较,纯 ECMAScript 只需要多一点代码:
data.reduce(function(acc, obj) {
acc[obj.name == 'no name'? 1:0].push(obj);
return acc;},{0:[],1:[]}
);
这么简单的东西为什么要用框架? 这是一个允许正确分组的纯 JS 解决方案。 然后很容易使用结果对象。
var array=[
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'foo', type: 'product'},
{name: 'bar', type: 'product'},
{name: 'john', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'no name', type: 'product'},
{name: 'no name', type: 'product'},
];
function groupBy(propertyName, array) {
var groupedElements = {};
for (var i = 0, len = array.length; i < len; i++) {
var el = array[i];
var value = el[propertyName].trim();
var group = groupedElements[value];
if (group === undefined) {
group = [el];
groupedElements[value] = group;
} else {
group.push(el);
}
}
return groupedElements;
}
var result = groupBy('name',array);