JavaScript的组对象(JavaScript group objects)

2019-10-23 19:14发布

我一直在现在正在寻找了几天,我还没有找到这个问题的答案特定问题。 我收到我的API从端点JavaScript对象数组。 我需要组合在一起基于该类型的对象。

对象的例如硬编码的阵列:

$scope.content = {
    things: [
        {
            thing: 'one',
            thingType: 'load'
        },
        {
            thing: 'two',
            thingType: 'export'
        },
        {
            thing: 'three',
            thingType: 'export'
        }
    ]
}
var typeArr = [];
for (var key in $scope.content.things) {

     typeArr[key] = $scope.content.things[key].thingType;
}
typeArr = _.uniq(typeArr);

现在typeArr将是[负载,出口]我需要发生接下来是所有的对象比较的东西是什么[],使得

 if(typeArr[key] === things[i].thingType) 

将推动该物体像这样:

typeArr = [
    load: {
        thing: 'one',
        thingType: 'load'
    },
    export: [{
        thing: 'two',
        thingType: 'export'
    },
    {
        thing: 'three',
        thingType: 'export'
     }

    ]
]

换句话说,我需要的对象保留整体,我需要分类,然后根据巢他们共享类型。 我认真被困在这一周。 任何有识之士将不胜感激。

Answer 1:

尝试这个

 var content = { things: [ { thing: 'one', thingType: 'load' }, { thing: 'two', thingType: 'export' }, { thing: 'three', thingType: 'export' } ] } var typeArr = {}; content.things.forEach(function(item){ typeArr[item.thingType] = typeArr[item.thingType]||[]; typeArr[item.thingType].push(item); }); document.body.innerHTML = JSON.stringify(typeArr); 



Answer 2:

请问这样的事情是可以接受的?

 var things = [ { thing: 'one', thingType: 'load' }, { thing: 'two', thingType: 'export' }, { thing: 'three', thingType: 'export' } ]; var types = {}; for (i in things) { var thing = things[i]; if (typeof types[thing.thingType] === "undefined") { types[thing.thingType] = []; } types[thing.thingType].push(thing); } console.log(types); 

产生的types对象会是什么样子

{
    load: [{
        thing: 'one',
        thingType: 'load'
    }],
    export: [{
        thing: 'two',
        thingType: 'export'
    },
    {
        thing: 'three',
        thingType: 'export'
     }]
}

也就是说,每个类型始终是一个数组,即使它只是包含了一个项目(在你的榜样,这只是一个对象)。 但我认为,这将是您更容易反正处理,知道你总是期待一个阵列。



Answer 3:

不是100%我知道你瞄准什么,但我会在它采取刺伤。 你是这个意思吗..

演示

$scope.content = {
      things: [
          {
              thing: 'one',
              thingType: 'load'
          },
          {
              thing: 'two',
              thingType: 'export'
          },
          {
              thing: 'three',
              thingType: 'export'
          }
      ]
  }

  $scope.groups = {};
  $scope.group  = group;


  function group(){

    angular.forEach($scope.content.things, function(thing){

      if($scope.groups.hasOwnProperty(thing.thingType)){
        $scope.groups[thing.thingType].push(thing);
      } else {
        $scope.groups[thing.thingType] = [thing];
      }

    });


  }


文章来源: JavaScript group objects