当前位置: 首页 > 知识库问答 >
问题:

javascript - 数据合并这个怎么实现?

裴哲
2024-10-24
let obj = {
  1: {
    fp: 6,
    lp: 8,
    bt: 2,
    ls: 1,
    isEb: false,
    isInEb: true,
    num: 3,
    nextIcon: 0,
    clearCnt: 1,
    type: 1,
  },
  2: {
    fp: 10,
    lp: 11,
    bt: 2,
    ls: 1,
    isEb: false,
    isInEb: true,
    num: 2,
    nextIcon: 0,
    clearCnt: 1,
    type: 0,
  },
  3: {
    fp: 13,
    lp: 14,
    bt: 2,
    ls: 1,
    isEb: false,
    isInEb: true,
    num: 2,
    nextIcon: 0,
    clearCnt: 1,
    type: 0,
  },
  4: {
    fp: 15,
    lp: 16,
    bt: 1,
    ls: 1,
    isEb: true,
    isInEb: true,
    num: 2,
    nextIcon: 7,
    clearCnt: 1,
    type: 1,
  },
  5: {
    fp: 17,
    lp: 19,
    bt: 2,
    ls: 1,
    isEb: false,
    isInEb: true,
    num: 3,
    nextIcon: 0,
    clearCnt: 1,
    type: 0,
  },
  6: {
    fp: 20,
    lp: 21,
    bt: 2,
    ls: 1,
    isEb: false,
    isInEb: true,
    num: 2,
    nextIcon: 0,
    clearCnt: 1,
    type: 1,
  },
  7: {
    fp: 23,
    lp: 24,
    bt: 1,
    ls: 2,
    isEb: false,
    isInEb: true,
    num: 2,
    nextIcon: 11,
    clearCnt: 1,
    type: 0,
  },
};
let arr = [6, 7, 8, 8, 9, 1, 8, 8, 8, 10, 3, 3, 11, 5, 5, 8, 8, 12, 12, 12, 8, 8, 1, 9, 9, 6, 3, 10, 7, 7];

let oderes = [
  [{ imgs: 6 }, { imgs: 7 }, { imgs: 8 }, { imgs: 8 }, { imgs: 9 }],
  [
    { imgs: 1 },
    { imgs: 8, fp: 6, lp: 8, bt: 2, ls: 1, isEb: false, isInEb: true, num: 3, nextIcon: 0, clearCnt: 1, type: 1 },
    { imgs: 10 },
  ],
  [
    { imgs: 3, fp: 10, lp: 11, bt: 2, ls: 1, isEb: false, isInEb: true, num: 2, nextIcon: 0, clearCnt: 1, type: 0 },
    { imgs: 11 },
    { imgs: 5, fp: 13, lp: 14, bt: 2, ls: 1, isEb: false, isInEb: true, num: 2, nextIcon: 0, clearCnt: 1, type: 0 },
  ],
  [
    { imgs: 8, fp: 15, lp: 16, bt: 1, ls: 2, isEb: true, isInEb: true, num: 2, nextIcon: 7, clearCnt: 1, type: 1 },
    { imgs: 12, fp: 17, lp: 19, bt: 2, ls: 1, isEb: false, isInEb: true, num: 3, nextIcon: 0, clearCnt: 1, type: 0 },
  ],
  [
    { imgs: 8, fp: 20, lp: 21, bt: 2, ls: 1, isEb: false, isInEb: true, num: 2, nextIcon: 0, clearCnt: 1, type: 1 },
    { imgs: 1 },
    { imgs: 9, fp: 23, lp: 24, bt: 1, ls: 2, isEb: false, isInEb: true, num: 2, nextIcon: 11, clearCnt: 1, type: 0 },
  ],
  [{ imgs: 6 }, { imgs: 3 }, { imgs: 10 }, { imgs: 7 }, { imgs: 7 }],
];

将obj对象和arr数组生成oderes对象数组5个一组的对象数组。 obj中的fp是arr数组的起始索引,lp是arr数组的结束索引实现 ,起始结束之间有生成的对象只生成一个
image.png

共有1个答案

司徒炎彬
2024-10-24

要实现将 obj 对象和 arr 数组合并生成 oderes 对象数组,其中每个子数组包含5个元素(或更少,如果剩余元素不足5个),并且根据 obj 中的 fplp 索引从 arr 中提取元素,同时合并 obj 中对应键的详细信息,你可以按照以下步骤编写代码:

  1. 遍历 obj 对象,根据每个对象的 fplp 索引从 arr 中提取元素。
  2. 合并提取的元素和 obj 中的其他属性到新的对象中。
  3. 将这些新对象按顺序添加到结果数组 oderes 中,并确保每个子数组包含最多5个元素。

下面是实现这一功能的 JavaScript 代码:

let obj = {
  // ... (obj 对象内容保持不变)
};
let arr = [
  // ... (arr 数组内容保持不变)
];

let oderes = [];
let currentGroup = [];

for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    const { fp, lp, ...restProps } = obj[key];
    
    // 确保 fp 和 lp 索引在 arr 范围内
    if (fp < arr.length && lp < arr.length && fp <= lp) {
      for (let i = fp; i <= lp; i++) {
        // 如果当前组未满5个元素或这是当前范围的第一个元素,则添加到当前组
        if (currentGroup.length < 5 || (currentGroup.length === 0 && i === fp)) {
          // 合并 arr 中的元素和 obj 中的其他属性
          const newItem = { imgs: arr[i], ...restProps };
          currentGroup.push(newItem);
          
          // 如果当前组已满5个元素,则将其添加到结果数组并重置当前组
          if (currentGroup.length === 5) {
            oderes.push(currentGroup);
            currentGroup = [];
          }
        }
        // 如果不是当前范围的第一个元素且当前组已满,则跳过
      }
    }
  }
}

// 如果最后一个组不为空且不足5个元素,也添加到结果数组
if (currentGroup.length > 0) {
  oderes.push(currentGroup);
}

console.log(oderes);

注意:

  • 这段代码假设 fplp 索引在 arr 数组的有效范围内,并且 fp <= lp
  • 如果 arr 数组中的元素不足以填充某个由 fplp 指定的范围,则这些范围将被忽略(即不会生成任何对象)。
  • 如果某个 fplp 指定的范围跨越了多个完整的5元素组,则这些元素将被分散到多个组中。
  • 生成的 oderes 数组中的每个子数组最多包含5个元素,但最后一个子数组可能包含少于5个元素。
 类似资料: