如何使用javascript通过对象属性将数组拆分为数组?
我目前有一个类似于以下阵列的阵列:如何使用javascript通过对象属性将数组拆分为数组?,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我目前有一个类似于以下阵列的阵列: [ {id:1,color:'red'}, {id:2,color:'blue'}, {id:3,color:'red'}, {id:4,color:'green'}, {id:5,color:'blue'}, ] 我正在寻找一种最快的方法来获得下面这样的结果,我可以通过对象中的属性对数组进行拆分/排序,在本例中是“颜色”: [ [ {id:1,color:'red'},
[
{id:1,color:'red'},
{id:2,color:'blue'},
{id:3,color:'red'},
{id:4,color:'green'},
{id:5,color:'blue'},
]
我正在寻找一种最快的方法来获得下面这样的结果,我可以通过对象中的属性对数组进行拆分/排序,在本例中是“颜色”:
[
[
{id:1,color:'red'},
{id:3,color:'red'},
],[
{id:2,color:'blue'},
{id:5,color:'blue'},
],[
{id:4,color:'green'},
]
]
我可以为此编写一个函数,但我认为在underline.js中可能已经有了这样的功能,但没有找到它。您需要使用underline的
groupBy
函数,您可以在文档右侧找到它
groupBy\uu.groupBy(列表、迭代器、[context])将集合拆分为 集合,按通过迭代器运行每个值的结果分组。如果 迭代器是字符串而不是函数,按属性分组 由每个值上的迭代器命名
您可以将
.groupBy
与.toArray
功能结合使用:
var dict = [
{id:1,color:'red'},
{id:2,color:'blue'},
{id:3,color:'red'},
{id:4,color:'green'},
{id:5,color:'blue'},
];
var grouped = _.groupBy(dict, function(x){ return x.color; });
var result = _.toArray(grouped);
您可以使用ES5功能获得所需的结果,而无需第三方库:
var data = [
{id:1,color:'red'},
{id:2,color:'blue'},
{id:3,color:'red'},
{id:4,color:'green'},
{id:5,color:'blue'},
];
var temp = {};
data.forEach(function(item){
if (temp[item.color]) {
temp[item.color].push(item);
} else {
temp[item.color] = [ item ]; }
});
var result = Object.keys(temp).map(function(key){ return temp[key]; });
为了支持较旧的浏览器,请使用
groupBy
功能,该功能不生成请求的输出。尽管如此,OP可以很好地处理它。canon是正确的,它返回一个对象,但这也应该同样有效。谢谢。此操作的结果需要包装在\uu.toArray()
中才能获得所需的输出
var data = [
{id:1,color:'red'},
{id:2,color:'blue'},
{id:3,color:'red'},
{id:4,color:'green'},
{id:5,color:'blue'},
];
var temp = {};
data.forEach(function(item){
if (temp[item.color]) {
temp[item.color].push(item);
} else {
temp[item.color] = [ item ]; }
});
var result = Object.keys(temp).map(function(key){ return temp[key]; });