简体   繁体   English

在某个索引后重复数组内的对象 n 次

[英]repeat objects inside the array n-times after certain index

在此处输入图像描述

when the similar circuit_id ends and the sets_rounds is greater than 1 eg 2 in our case.当相似的 circuit_id 结束并且 sets_rounds 大于 1 时,例如在我们的例子中为 2。 I want them to repeat after the last similar circuit_id.我希望他们在最后一个类似的电路 ID 之后重复。

from position 4th to 9th they have the same circuit_id and the rounds are 2 i want them to repeat once from position 10th.从第 4 位到第 9 位,它们具有相同的电路 ID,并且轮数为 2,我希望它们从第 10 位重复一次。

here is the array which i want to manipulate,这是我要操作的数组,

this is what i have这就是我所拥有的

[
{
    "circuit_id": "226",
    "sets_rounds": 1,
    "video_name": "Jumping Jack",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/185/video/original/nog_105.mp4"
},
{
    "circuit_id": "227",
    "sets_rounds": 1,
    "video_name": "Thruster",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/210/video/original/nog_131.mp4"
},
{
    "circuit_id": "228",
    "sets_rounds": 1,
    "video_name": "Shuffle",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/109/video/original/nog_015.mp4"
},
{
    "circuit_id": "230",
    "sets_rounds": 1,
    "video_name": "Side Lunge",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/174/video/original/nog_091.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Speed Skaters",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/121/video/original/nog_028.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Donkey kick up right",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2072/video/original/nog_263.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Squat jacks",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2065/video/original/nog_256.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Donkey kick up left",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2073/video/original/nog_264.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Broad Jumps",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/108/video/original/nog_014.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Cross Mountain Jack",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/209/video/original/nog_130.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Squat Knee Raise Twist",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/153/video/original/nog_063.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Reverse Marching Planks",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2243/video/original/nog_311.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Knees to stand up",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2060/video/original/nog_249.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Dish Bicycles",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2253/video/original/nog_321.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Triples (lunge - lunge - squat)",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1954/video/original/nog_236.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Knee Plank Side Touch",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/128/video/original/nog_036.mp4"
},
{
    "circuit_id": "214",
    "sets_rounds": 1,
    "video_name": "Quadricep Stretch Alternating",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1031/video/original/stc_001.mp4"
},
{
    "circuit_id": "215",
    "sets_rounds": 1,
    "video_name": "Seated Shoulder Stretch",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1050/video/original/stc_020.mp4"
},
{
    "circuit_id": "222",
    "sets_rounds": 1,
    "video_name": "Standing Calf Stretch Alternating",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1033/video/original/stc_003.mp4"
},
{
    "circuit_id": "225",
    "sets_rounds": 1,
    "video_name": "Lower Back Stretch Alternating",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1052/video/original/stc_022.mp4"
}]

this is what I want这就是我要的

[
{
    "circuit_id": "226",
    "sets_rounds": 1,
    "video_name": "Jumping Jack",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/185/video/original/nog_105.mp4"
},
{
    "circuit_id": "227",
    "sets_rounds": 1,
    "video_name": "Thruster",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/210/video/original/nog_131.mp4"
},
{
    "circuit_id": "228",
    "sets_rounds": 1,
    "video_name": "Shuffle",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/109/video/original/nog_015.mp4"
},
{
    "circuit_id": "230",
    "sets_rounds": 1,
    "video_name": "Side Lunge",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/174/video/original/nog_091.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Speed Skaters",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/121/video/original/nog_028.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Donkey kick up right",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2072/video/original/nog_263.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Squat jacks",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2065/video/original/nog_256.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Donkey kick up left",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2073/video/original/nog_264.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Broad Jumps",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/108/video/original/nog_014.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Cross Mountain Jack",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/209/video/original/nog_130.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Speed Skaters",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/121/video/original/nog_028.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Donkey kick up right",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2072/video/original/nog_263.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Squat jacks",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2065/video/original/nog_256.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Donkey kick up left",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2073/video/original/nog_264.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Broad Jumps",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/108/video/original/nog_014.mp4"
},
{
    "circuit_id": "231",
    "sets_rounds": 2,
    "video_name": "Cross Mountain Jack",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/209/video/original/nog_130.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Squat Knee Raise Twist",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/153/video/original/nog_063.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Reverse Marching Planks",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2243/video/original/nog_311.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Knees to stand up",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2060/video/original/nog_249.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Dish Bicycles",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2253/video/original/nog_321.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Triples (lunge - lunge - squat)",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1954/video/original/nog_236.mp4"
},
{
    "circuit_id": "229",
    "sets_rounds": 1,
    "video_name": "Knee Plank Side Touch",
    "rest_sets": 15,
    "rest_exercise": 15,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/128/video/original/nog_036.mp4"
},
{
    "circuit_id": "214",
    "sets_rounds": 1,
    "video_name": "Quadricep Stretch Alternating",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1031/video/original/stc_001.mp4"
},
{
    "circuit_id": "215",
    "sets_rounds": 1,
    "video_name": "Seated Shoulder Stretch",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1050/video/original/stc_020.mp4"
},
{
    "circuit_id": "222",
    "sets_rounds": 1,
    "video_name": "Standing Calf Stretch Alternating",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1033/video/original/stc_003.mp4"
},
{
    "circuit_id": "225",
    "sets_rounds": 1,
    "video_name": "Lower Back Stretch Alternating",
    "rest_sets": 0,
    "rest_exercise": 0,
    "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1052/video/original/stc_022.mp4"
}]

You could use reduce with a couple of state variables to do this:你可以使用reduce和几个状态变量来做到这一点:

const remapData = () => {
  let circuitId;
  let itemsToCopy = [];

  return data.reduce((memo, item) => {
    // Circuit id has changed, push all the current items to copy   
    if (circuitId !== item.circuit_id) {
      memo.push(...itemsToCopy);
      itemsToCopy = [];
    }

    memo.push(item);

    circuitId = item.circuit_id;
    if (item.sets_rounds === 2) {
      itemsToCopy.push(item);
    }

    return memo;
  }, []);  
}

Here's a codesandbox demo 这是一个codeandbox演示

I would do this, creating an output array and fill it using a for-loop for every set_rounds.我会这样做,创建一个输出数组并为每个 set_rounds 使用 for 循环填充它。

const output = [];

for(let i=0; i<input.length; i++)
{
  let times = input[i].sets_rounds;
  for (let j = 0; j < times; j++) output.push(input[i]);
}

 const input = [ { "circuit_id": "226", "sets_rounds": 1, "video_name": "Jumping Jack", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/185/video/original/nog_105.mp4" }, { "circuit_id": "227", "sets_rounds": 1, "video_name": "Thruster", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/210/video/original/nog_131.mp4" }, { "circuit_id": "228", "sets_rounds": 1, "video_name": "Shuffle", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/109/video/original/nog_015.mp4" }, { "circuit_id": "230", "sets_rounds": 1, "video_name": "Side Lunge", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/174/video/original/nog_091.mp4" }, { "circuit_id": "231", "sets_rounds": 2, "video_name": "Speed Skaters", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/121/video/original/nog_028.mp4" }, { "circuit_id": "231", "sets_rounds": 2, "video_name": "Donkey kick up right", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2072/video/original/nog_263.mp4" }, { "circuit_id": "231", "sets_rounds": 2, "video_name": "Squat jacks", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2065/video/original/nog_256.mp4" }, { "circuit_id": "231", "sets_rounds": 2, "video_name": "Donkey kick up left", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2073/video/original/nog_264.mp4" }, { "circuit_id": "231", "sets_rounds": 2, "video_name": "Broad Jumps", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/108/video/original/nog_014.mp4" }, { "circuit_id": "231", "sets_rounds": 2, "video_name": "Cross Mountain Jack", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/209/video/original/nog_130.mp4" }, { "circuit_id": "229", "sets_rounds": 1, "video_name": "Squat Knee Raise Twist", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/153/video/original/nog_063.mp4" }, { "circuit_id": "229", "sets_rounds": 1, "video_name": "Reverse Marching Planks", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2243/video/original/nog_311.mp4" }, { "circuit_id": "229", "sets_rounds": 1, "video_name": "Knees to stand up", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2060/video/original/nog_249.mp4" }, { "circuit_id": "229", "sets_rounds": 1, "video_name": "Dish Bicycles", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/2253/video/original/nog_321.mp4" }, { "circuit_id": "229", "sets_rounds": 1, "video_name": "Triples (lunge - lunge - squat)", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1954/video/original/nog_236.mp4" }, { "circuit_id": "229", "sets_rounds": 1, "video_name": "Knee Plank Side Touch", "rest_sets": 15, "rest_exercise": 15, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/128/video/original/nog_036.mp4" }, { "circuit_id": "214", "sets_rounds": 1, "video_name": "Quadricep Stretch Alternating", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1031/video/original/stc_001.mp4" }, { "circuit_id": "215", "sets_rounds": 1, "video_name": "Seated Shoulder Stretch", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1050/video/original/stc_020.mp4" }, { "circuit_id": "222", "sets_rounds": 1, "video_name": "Standing Calf Stretch Alternating", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1033/video/original/stc_003.mp4" }, { "circuit_id": "225", "sets_rounds": 1, "video_name": "Lower Back Stretch Alternating", "rest_sets": 0, "rest_exercise": 0, "video_url": "https://dcx828kjwpmk.cloudfront.net/switch-solutions/exercises/1052/video/original/stc_022.mp4" }]; const output = []; for(let i=0; i<input.length; i++) { let times = input[i].sets_rounds; for (let j = 0; j < times; j++) output.push(input[i]); } console.log(input); console.log(output);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM