如何循环遍历 2 个对象数组并通过匹配 id 合并

How to loop through 2 object arrays and merge by matching id

我找到了一些示例并使它几乎可以正常工作。我正在尝试比较 2 个对象数组:

    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)

使用 for 循环怎么样?没有图书馆似乎很简单。

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);