Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа с массивами, не работает метод slice (https://javascript.ru/forum/misc/81601-rabota-s-massivami-ne-rabotaet-metod-slice.html)

denis_alekss 22.12.2020 16:14

Работа с массивами, не работает метод slice
 
Прочитал про метод slice на сайте Javascript https://learn.javascript.ru/array-methods. Не правильно выводит массив.

Вот код:
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тест</title>
 </head>
 <body>  
<p id="result"></p>

    <script>
let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"];
arr.slice(-4);
for(let i = 0; i<arr.length; i++){
result.innerHTML += i + " - " + arr[i] + '<br>'}
 
  </script>
 </body>
</html>



arr.slice(-4);

Должна с 4-го элемента, считаем с конца массива, так как там минус 4. Это элемент прямо.

Должно вывести со слова прямо до конца все элементы. А выводит все элементы полностью.

Если изменить код на такой:
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тест</title>
 </head>
 <body>  
<p id="result"></p>

    <script>
let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"];
let rez = arr.slice(-4);
for(let i = 0; i<rez.length; i++){
result.innerHTML += i + " - " + arr[i] + '<br>'}
 
  </script>
 </body>
</html>




произойдет вывод только первых 4-х элементов, но правило гласит если -4, с конца считаем 4 -ый элемент и выводим все элементы до конца, но выводится почему-то элементы сначала,

0 - Я
1 - изучаю
2 - JavaScript
3 - прямо

вместо такого вывода:

"прямо", "сейчас", "помни", "это"



Второй пример:

Если я захочу скопировать с какого-то элемента массива по какой-то. Например со 2-го элемента по 5.

И напишу такой код:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тест</title>
 </head>
 <body>  
<p id="result"></p>

    <script>
let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"];
let rez = arr.slice(2,5);
for(let i = 0; i<rez.length; i++){
result.innerHTML += i + " - " + arr[i] + '<br>'}
 
  </script>
 </body>
</html>



arr.slice(2,5); Не происходит копирования, происходит вывод непонятно чего, а вывод такой в итоге:
0 - Я
1 - изучаю
2 - JavaScript



хотя я эти элементы не выбирал вообще, а выбирал эти:

"изучаю", "JavaScript", "прямо", "сейчас",

рони 22.12.2020 16:39

denis_alekss,
1 код строка 12 бесполезная, результат нигде не сохраняется.

2 код ошибка в строке 14.
3 та же ошибка.

denis_alekss 23.12.2020 13:37





Я выводил не новый массив, а старый, в этом был залет. Поменял на строку

result.innerHTML += i + " - " + rez[i] + '<br>'}



Вроде как заработал вывод. Только есть момент.

Если к написать вот так:



<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тест</title>
 </head>
 <body>  
<p id="result"></p>

    <script>
let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"];
let rez = arr.slice(-3);
for(let i = 0; i<rez.length; i++){
result.innerHTML += i + " - " + rez[i] + '<br>'}
 
  </script>
 </body>
</html>



Вывод правильный, с конца массива стартует вывод с третьего элемента по последний:



0 - сейчас
1 - помни
2 - это



Ели поменять эту строку:

let rez = arr.slice(-3);


[Нажмите и перетащите, чтобы переместить]

на
let rez = arr.slice(2,5);



Вывод такой:




0 - JavaScript
1 - прямо
2 - сейчас



Но должен произойти вывод со 2-го элемента по 5, но происходит вывод со второго по 4-ый элемент, почему?


2 элемент массива: "JavaScript",

3 элемент массива: "прямо",

4 элемент массива: "сейчас",

5 элемент массива: "помни",



5 -ый элемент, слово помни не выводит.

рони 23.12.2020 14:39

Цитата:

Сообщение от denis_alekss
Но должен произойти вывод со 2-го элемента по 5, но происходит вывод со второго по 4-ый элемент, почему?

Цитата:

Сообщение от denis_alekss
Прочитал про метод slice на сайте Javascript https://learn.javascript.ru/array-methods.

???
Цитата:

Он возвращает новый массив, в который копирует элементы, начиная с индекса start и до end (не включая end).


Часовой пояс GMT +3, время: 23:33.