首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据属性将对象数组分解为单独的数组

根据属性将对象数组分解为单独的数组
EN

Stack Overflow用户
提问于 2013-02-05 05:52:50
回答 5查看 58.2K关注 0票数 67

假设我有一个这样的数组:

代码语言:javascript
复制
var arr = [
    {type:"orange", title:"First"},
    {type:"orange", title:"Second"},
    {type:"banana", title:"Third"},
    {type:"banana", title:"Fourth"}
];

我想把它分成数组,这些数组的对象具有相同的类型,所以:

代码语言:javascript
复制
[{type:"orange", title:"First"},
{type:"orange", title:"Second"}]

[{type:"banana", title:"Third"},
{type:"banana", title:"Fourth"}]

但我想泛泛地这样做,这样就不会有指定橙色或香蕉的if语句。

代码语言:javascript
复制
// not like this
for (prop in arr){
    if (arr[prop] === "banana"){
       //add to new array
    }
}

有什么想法?JQuery和下划线都是要使用的选项。

EN

回答 5

Stack Overflow用户

发布于 2013-02-05 06:03:10

这里假设有一个对象数组:

代码语言:javascript
复制
function groupBy(array, property) {
    var hash = {};
    for (var i = 0; i < array.length; i++) {
        if (!hash[array[i][property]]) hash[array[i][property]] = [];
        hash[array[i][property]].push(array[i]);
    }
    return hash;
}

groupBy(arr,'type')  // Object {orange: Array[2], banana: Array[2]}
groupBy(arr,'title') // Object {First: Array[1], Second: Array[1], Third: Array[1], Fourth: Array[1]}
票数 13
EN

Stack Overflow用户

发布于 2013-02-05 06:04:02

只需构建一个字典,根据对象的标题保存对象。你可以这样做:

js

代码语言:javascript
复制
var arr = [
{type:"orange", title:"First"},
 {type:"orange", title:"Second"},
 {type:"banana", title:"Third"},
 {type:"banana", title:"Fourth"}
];
var sorted = {};
for( var i = 0, max = arr.length; i < max ; i++ ){
 if( sorted[arr[i].type] == undefined ){
  sorted[arr[i].type] = [];
 }
 sorted[arr[i].type].push(arr[i]);
}
console.log(sorted["orange"]);
console.log(sorted["banana"]);

jsfiddle演示:http://jsfiddle.net/YJnM6/

票数 10
EN

Stack Overflow用户

发布于 2020-03-25 00:59:09

ES6解决方案:

代码语言:javascript
复制
function groupBy(arr, property) {
  return arr.reduce((acc, cur) => {
    acc[cur[property]] = [...acc[cur[property]] || [], cur];
    return acc;
  }, {});
}

或者完全ES6fy:

代码语言:javascript
复制
const groupBy = (arr, property) => {
    return arr.reduce((acc, cur) => {
      acc[cur[property]] = [...acc[cur[property]] || [], cur];
      return acc;
    }, {});
}

我希望它能有所帮助!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14696326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档