Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2020, 16:21   #1
denis_alekss
Пользователь
 
Регистрация: 01.12.2020
Сообщений: 25
По умолчанию Работа с массивами, не работает метод 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", "прямо", "сейчас",
denis_alekss вне форума Ответить с цитированием
Старый 22.12.2020, 16:25   #2
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Начните выводить результирущий массив rez, а не исходный arr... и все вдруг заработает.
FrosyaZZ вне форума Ответить с цитированием
Старый 23.12.2020, 13:42   #3
denis_alekss
Пользователь
 
Регистрация: 01.12.2020
Сообщений: 25
По умолчанию

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

Код:
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 -ый элемент, слово помни не выводит.
denis_alekss вне форума Ответить с цитированием
Старый 23.12.2020, 13:48   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

https://www.w3schools.com/jsref/tryi...ef_slice_array
Цитата:
The slice() method selects the elements starting at the given start argument, and ends at, but does not include, the given end argument.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Scala Написать функцию slice получения среза с листа. rizhikm Помощь студентам 3 19.03.2017 14:50
C++ - Метод деления отрезка пополам (работа с массивами) Fazer77777 Помощь студентам 0 21.02.2015 14:34
Программа с массивами и метод пузырька (C++) Ligeros905 Помощь студентам 3 31.10.2013 22:12
некорректно работает программа с массивами altair555222 Помощь студентам 4 30.11.2010 13:50
prototype.slice.call() Viconte JavaScript, Ajax 0 30.09.2010 18:37