首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Angularjs或下划线js合并具有不同值的对象

使用Angularjs或下划线js合并具有不同值的对象
EN

Stack Overflow用户
提问于 2014-07-31 04:12:16
回答 2查看 1.1K关注 0票数 1

我试图将两个对象合并到一个多维对象中,以便通过'unique_id‘在Angularjs控制器中使用。(注:我还添加了下划线Js )。

对象1示例:

代码语言:javascript
复制
[ 
  { "unique_id": "001", "title": "Putting Green Challenge - Motion Depends on Force and Mass" }, 
  { "unique_id": "002", "title": "Molecules to Organisms: Frog Life Cycle" }
]

对象#2示例(比对象1有更多的行):

代码语言:javascript
复制
[
  {

   "ab_id": "76153F02-29F3-11D8-95EA-951BF95D9AEF",
   "unique_id": "001",
   "title": "How Speed Relates to Energy",
   "state": "NY",
   "document_title": "Core Curriculum",
   "grade_code": "K-4",
   "grade_descr": "Elementary",
   "state_id": "1.S2.3a",
   "state_text": "Use appropriate \"inquiry and process skills\" to collect data"

},
{

  "ab_id": "7980A762-29F3-11D8-BD14-861D7EA8D134",
  "unique_id": "001",
  "title": "How Speed Relates to Energy",
  "state": "NY",
  "document_title": "Core Curriculum",
  "grade_code": "5-8",
  "grade_descr": "Intermediate",
  "state_id": "1.S3.2d",
  "state_text": "formulate and defend explanations and conclusions as they relate to scientific phenomena"

}
]

我的财务主任:

代码语言:javascript
复制
abApp.controller("abEE", function(abService, $http, $scope, $q, _) {
  var abApp = this;

  $scope.abData = $http.get('/data/ab_activities.json', {
    cache: false
  });
  $scope.eeData = $http.get('/activities/eedata', {
    cache: false
  });

  $q.all([$scope.eeData, $scope.abData]).then(function(values) {
    var val = ??? This is where I want to merge the objects into one big multidimensional object..
});

这是console.dir(值)的输出;

代码语言:javascript
复制
0  Object { data=[28], status=200, config={...}, more...}
1  Object { data=[743], status=200, config={...}, more...}

这是我想要得到的期望输出:

代码语言:javascript
复制
[
  { "unique_id": "001", "title": "Putting Green Challenge - Motion Depends on Force and Mass", "alignments": [{"ab_id": "76153F02-29F3-11D8-95EA-951BF95D9AEF","unique_id": "001","title": "How Speed Relates to Energy",...}, {"ab_id": "7980A762-29F3-11D8-BD14-861D7EA8D134", "unique_id": "001", "title": "How Speed Relates to Energy",...}]
]
EN

回答 2

Stack Overflow用户

发布于 2014-07-31 06:25:11

如果您可以切换到使用房客而不是下划线,则可以这样实现:

代码语言:javascript
复制
var val = _.values(_.merge(_.indexBy(values[0].data, 'unique_id'), _.indexBy(values[1].data, 'unique_id')));

下划线没有_.merge(),您必须在没有它的情况下遍历每个属性。

票数 1
EN

Stack Overflow用户

发布于 2014-07-31 04:24:27

我不认为角或下划线有这种功能。我将执行类似于以下伪代码的操作:

代码语言:javascript
复制
tempObject = {}
for object in objectArray
  if tempObject[object.unique_id] isnt undefined
    tempObject[object.unique_id] = object
  else angular.extend(tempObject[object.unique_id], object) // or the other way around depending on your preference
resultingArray = []
for object, key of tempObject
  resultingArray.push(object)

您必须为两个返回的数组运行for object in objectArray,但这应该有效,而且可能比大多数合并算法更高效,因为最多只能遍历每个返回的数组两次。

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

https://stackoverflow.com/questions/25050745

复制
相关文章

相似问题

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