Как можно добавить новый элемент в массив в JavaScript, исходя из определенного условия?

Как можно расширить данному массиву перейдя к новому, добавляя новый элемент перед каждым элементом, в зависимости от значения в поле video?
  • 6 марта 2024 г. 13:48
Ответы на вопрос 3
Для добавления нового элемента в массив в JavaScript, исходя из определенного условия, можно использовать метод push(). Например:

```javascript
let arr = [1, 2, 3, 4, 5];
let element = 6;

if (условие) {
    arr.push(element);
}
```

Для добавления нового элемента перед каждым элементом в массиве, в зависимости от значения в поле video, можно использовать метод map() вместе с методом splice(). Например:

```javascript
let array = [
    { video: true, data: 'video1' },
    { video: false, data: 'text1' },
    { video: true, data: 'video2' },
    { video: false, data: 'text2' }
];

array = array.map(item => {
    if (item.video) {
        let newItem = { video: false, data: 'newElement' };
        return [newItem, item];
    } else {
        return item;
    }
}).flat();

console.log(array);
```

Этот код добавит новый элемент перед каждым элементом массива, который имеет поле video со значением true. Результат будет сохранен в переменной array.
<pre><code class="javascript">const result = arr.reduce(
  (acc, cur) =&gt; {
    if (cur.video !== undefined) {
      acc.push({ src_video: cur.video });
    }
    acc.push(cur);
    return acc;
  },
  [],
)
// Array(5) [ {…}, {…}, {…}, {…}, {…} ]
​// 0: Object { src_video: "some-path-1" }
// ​1: Object { src: "some-path-1", video: "some-path-1" }
​// 2: Object { src_video: "some-path-2" }
// 3: Object { src: "some-path-2", video: "some-path-2" }
​// 4: Object { src: "some-path", video: null }</code></pre>
Элегантный способ - это не всегда хорошо. Если массив не занимает мегабайты данных, то самым простым способом будет создание нового выходного массива нулевой длины, а потом, просто перебирая элементы оригинального массива, вставляете их в новый массив, а в нужные моменты просто вставляйте сперва эту вставку , а потом сразу элемент оригинального массива. <br/> И не нужны вам эти "шикарные" reduce в данной ситуации. Обычный цикл for. Потому что reduce совершенно бесполезен конкретно в данном случае, а читаемость ухудшит.
Похожие вопросы