Как разделить массив массивов путем поиска определенной строки? У меня есть массив из сотен объектов. Я хочу разбить строку на определенную строку, которая находится в случайном месте для каждого объекта. Я хочу удалить все, что идет после «конкретной строки» и массива «конкретной строки».

У меня есть массивы, которые выглядят так

array = 
[{
    "post": 1,
    "arr": 
        {
            "categories":
            [
                [
                    "string 1"
                ],
                [
                    "string 2"
                ],
                [
                    "string 3"
                ],
                [
                    "specific string"
                ],
                [
                    "string 4"
                ],
                [
                    "string 5"
                ],
                [
                    "string 6"
                ],
                [
                    "string 7"
                ]
            ]
        }
},
{
    "post": 3,
    "arr": 
    {
        "categories":
        [
            [
                "string 1"
            ],
            [
                "string 2"
            ],
            [
                "specific string"
            ],
            [
                "string 3"
            ],
            [
                "string 4"
            ],
            [
                "string 5"
            ],
            [
                "string 6"
            ],
            [
                "string 7"
            ]
        ]
    }
},


{
    "post": 2,
    "arr": 
    {
        "categories":
        [
            [
                "string 1"
            ],
            [
                "string 2"
            ],
            [
                "string 3"
            ],
            [
                "string 4"
            ],
            [
                "string 5"
            ],
            [
                "specific string"
            ],
            [
                "string 6"
            ],
            [
                "string 7"
            ],
            [
                "string 8"
            ]
        ]
    }
}
]

Я хочу, чтобы мой выходной массив выглядел так

[{
    "post": 1,
    "arr": 
        {
            "categories":
            [
                [
                    "string 1"
                ],
                [
                    "string 2"
                ],
                [
                    "string 3"
                ]
            ]
        }
},
{
    "post": 3,
    "arr": 
    {
        "categories":
        [
            [
                "string 1"
            ],
            [
                "string 2"
            ]
        ]
    }
},


{
    "post": 2,
    "arr": 
    {
        "categories":
        [
            [
                "string 1"
            ],
            [
                "string 2"
            ],
            [
                "string 3"
            ],
            [
                "string 4"
            ],
            [
                "string 5"
            ]
        ]
    }
}
]

Я знаю, что slice не работает со строками, но это то, чего я хотел добиться с помощью кода.

for(var i=0, len = array.length; i < len; i++){
array[0].arr['categories'].slice(0,'specific string');
}
1
Sarah 22 Ноя 2022 в 21:51
Кстати, почему у вас есть массивы только с одним значением?
 – 
Nina Scholz
22 Ноя 2022 в 21:54

1 ответ

Вы можете найти индекс нужного массива и разрезать массив.

const
    array = [{ post: 1, arr: { categories: [["string 1"], ["string 2"], ["string 3"], ["specific string"], ["string 4"], ["string 5"], ["string 6"], ["string 7"]] } }, { post: 3, arr: { categories: [["string 1"], ["string 2"], ["specific string"], ["string 3"], ["string 4"], ["string 5"], ["string 6"], ["string 7"]] } }, { post: 2, arr: { categories: [["string 1"], ["string 2"], ["string 3"], ["string 4"], ["string 5"], ["specific string"], ["string 6"], ["string 7"], ["string 8"]] } }],
    result = array.map(({ arr: { categories }, ...o }) => ({
        ...o,
        arr: { categories: categories.slice(0, categories.findIndex(([s]) => s === "specific string")) }
    }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0
Nina Scholz 22 Ноя 2022 в 22:02