2016-05-16 264 views
0

我找到了一些例子,并得到这个几乎工作。我试图比较两个对象数组:如何遍历2个对象数组,并通过匹配id进行合并

var responseExercises = [{ 
    "exerciseId": 44, 
    "exerciseName": "Double Leg Press with Treading", 
    "exerciseBenefits": "Core Control, Axial Elongation", 
    "exerciseSprings": [], 
    "isHidden": false, 
    "workoutId": null, 
    "workouts": [], 
    "exerciseImages": [], 
    "exerciseRepetitions": [] 
}, { 
    "exerciseId": 46, 
    "exerciseName": "Bent Arm Arcs with Quarter Circles", 
    "exerciseBenefits": "Improved Posture, Upper Torso Alignment", 
    "exerciseSprings": [], 
    "isHidden": false, 
    "workoutId": null, 
    "workouts": [], 
    "exerciseImages": [], 
    "exerciseRepetitions": [] 
}, { 
    "exerciseId": 47, 
    "exerciseName": "Bridging with Leg Press", 
    "exerciseBenefits": "Spine Articulation, Upper Torso Alignment", 
    "exerciseSprings": [], 
    "isHidden": false, 
    "workoutId": null, 
    "workouts": [], 
    "exerciseImages": [], 
    "exerciseRepetitions": [] 
}]; 

var responseSprings = [{ 
    "clientExerciseSpringId": 1, 
    "clientExerciseSpringCount": "2", 
    "clientExerciseSpringColor": "blue", 
    "clientExerciseSpringLevel": "bottom", 
    "exerciseId": 44, 
    "clientWorkoutId": 4, 
    "clientWorkout": null 
}, { 
    "clientExerciseSpringId": 2, 
    "clientExerciseSpringCount": "1", 
    "clientExerciseSpringColor": "blue", 
    "clientExerciseSpringLevel": "bottom", 
    "exerciseId": 44, 
    "clientWorkoutId": 4, 
    "clientWorkout": null 
}, { 
    "clientExerciseSpringId": 3, 
    "clientExerciseSpringCount": "2", 
    "clientExerciseSpringColor": "yellow", 
    "clientExerciseSpringLevel": "bottom", 
    "exerciseId": 46, 
    "clientWorkoutId": 4, 
    "clientWorkout": null 
}, { 
    "clientExerciseSpringId": 4, 
    "clientExerciseSpringCount": "1", 
    "clientExerciseSpringColor": "yellow", 
    "clientExerciseSpringLevel": "top", 
    "exerciseId": 46, 
    "clientWorkoutId": 4, 
    "clientWorkout": null 
}, { 
    "clientExerciseSpringId": 5, 
    "clientExerciseSpringCount": "2", 
    "clientExerciseSpringColor": "blue", 
    "clientExerciseSpringLevel": "bottom", 
    "exerciseId": 47, 
    "clientWorkoutId": 4, 
    "clientWorkout": null 
}]; 

我需要将responseSprings推入那里匹配responseExercise。现在我得到的结果是,如果有多个匹配exerciseSprings其中只有1被推入

responseSprings.responseSprings

阵列。我在项目中使用下划线,所以如果更好的解决方案可以使用。

fiddle

vm.combineResponse = function(responseExercises, responseSprings) { 
    console.log($.map(responseExercises, function(exercise) { 
    var spring = $.grep(responseSprings, function(spring) { 
     return spring.exerciseId === exercise.exerciseId; 
    })[0]; 
    exercise.exerciseSprings.push(spring); 
    return exercise; 
    })); 
}; 

vm.combineResponse(responseExercises, responseSprings) 
+0

你能提供预期的数组吗? – mtamma

回答

1

如何使用循环?似乎很简单,没有图书馆就足够了。

for (var i = 0; i < responseExercises.length; i++) { 
    var exercise = responseExercises[i]; 
    var id = exercise.exerciseId; 

    for (var j = 0; j < responseSprings.length; j++) { 
     var spring = responseSprings[j]; 
     if (spring.exerciseId == id) { 
      exercise.exerciseSprings.push(spring); 
     } 
    } 
}; 

console.log(responseExercises); 
相关问题