多次拼接一组对象

时间:2021-03-03 08:53:10

标签: javascript arrays object splice

我需要处理我的一些数据。有一个对象数组。这些对象之一是“活动的”。我拼接了活动房间并将其放置在数组的索引 0 处。现在我需要删除更多数据并且遇到问题。只有一个 roomActive: true 和只有一个 sectionActive: true

const exhibitions = [
    {
        title: "Lobby",
        roomActive: false,
        sections: [
            { id: 4, sectionActive: false },
            { id: 5, sectionActive: false },
            { id: 6, sectionActive: false },
            { id: 7, sectionActive: false }
        ]
    },
    {
        title: "First Room",
        roomActive: false,
        sections: [
            { id: 8, sectionActive: false },
            { id: 9, sectionActive: false },
            { id: 10, sectionActive: false },
            { id: 11, sectionActive: false }
        ]
    },
    {
        title: "Second Room",
        roomActive: true,
        sections: [
            { id: 12, sectionActive: false },
            { id: 13, sectionActive: true },
            { id: 14, sectionActive: false },
            { id: 15, sectionActive: false }
        ]
    },
    {
        title: "Fourth Room",
        roomActive: false,
        sections: [
            { id: 16, sectionActive: false },
            { id: 17, sectionActive: false },
            { id: 18, sectionActive: false },
            { id: 19, sectionActive: false }
        ]
    }

要将 sectionActive 放在索引 0 处,我会这样做:

  const handleTimelineClose = () => {
    const newArray = [...exhibitions]

    newArray.find((item, i) => {
      return item.roomActive === true
        && newArray.unshift(newArray.splice(i, 1)[0])
    })
    return newArray
  }

这个函数把这个对象放在索引 0 处:

 {
        title: "Second Room",
        roomActive: true,
        sections: [
            { id: 12, sectionActive: false },
            { id: 13, sectionActive: true },
            { id: 14, sectionActive: false },
            { id: 15, sectionActive: false }
        ]
    }

但我还需要操作这个 sections 对象的 roomActive: true 数组。我需要找到并保留 sectionActive: true 的对象和下一个索引中的对象。但我不知道如何做到这一点。

 {
            title: "Second Room",
            roomActive: true,
            sections: [
                { id: 13, sectionActive: true },
                { id: 14, sectionActive: false },
            ]
        }

预期结果:

 const exhibitions = [
        {
            title: "Second Room",
            roomActive: true,
            sections: [
                { id: 13, sectionActive: true },
                { id: 14, sectionActive: false },
            ]
        },
        {
            title: "Lobby",
            roomActive: false,
            sections: [
                { id: 4, sectionActive: false },
                { id: 5, sectionActive: false },
                { id: 6, sectionActive: false },
                { id: 7, sectionActive: false }
            ]
        },
        {
            title: "First Room",
            roomActive: false,
            sections: [
                { id: 8, sectionActive: false },
                { id: 9, sectionActive: false },
                { id: 10, sectionActive: false },
                { id: 11, sectionActive: false }
            ]
        },
        {
            title: "Fourth Room",
            roomActive: false,
            sections: [
                { id: 16, sectionActive: false },
                { id: 17, sectionActive: false },
                { id: 18, sectionActive: false },
                { id: 19, sectionActive: false }
            ]
        }

1 个答案:

答案 0 :(得分:0)

您可以通过查看属性来过滤数组并检查前一个属性是否为 true

const
    sections = [{ id: 12, sectionActive: false }, { id: 13, sectionActive: true }, { id: 14, sectionActive: false }, { id: 15, sectionActive: false }],
    trueAndNext = sections
        .filter(({ sectionActive }, i, a) => sectionActive || a[i -1]?.sectionActive);
    

console.log(trueAndNext);
.as-console-wrapper { max-height: 100% !important; top: 0; }