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

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

本文关键字:id 合并 数组 2个 何循环 循环 对象      更新时间:2023-09-26

我找到了一些例子,并使其几乎起作用。我正在尝试比较两个对象数组:

    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。我现在得到的结果是,如果有多个匹配的练习,那么只有其中一个被推入

responseSprings.responseSprings

数组。我在项目中使用下划线,所以可以使用更好的解决方案。

小提琴

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