Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2020, 16:14
Аспирант
Отправить личное сообщение для denis_alekss Посмотреть профиль Найти все сообщения от denis_alekss
 
Регистрация: 01.12.2020
Сообщений: 55

Работа с массивами, не работает метод 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", "прямо", "сейчас",
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2020, 16:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

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

2 код ошибка в строке 14.
3 та же ошибка.
Ответить с цитированием
  #3 (permalink)  
Старый 23.12.2020, 13:37
Аспирант
Отправить личное сообщение для denis_alekss Посмотреть профиль Найти все сообщения от denis_alekss
 
Регистрация: 01.12.2020
Сообщений: 55





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

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 -ый элемент, слово помни не выводит.
Ответить с цитированием
  #4 (permalink)  
Старый 23.12.2020, 14:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от denis_alekss
Но должен произойти вывод со 2-го элемента по 5, но происходит вывод со второго по 4-ый элемент, почему?
Сообщение от denis_alekss
Прочитал про метод slice на сайте Javascript https://learn.javascript.ru/array-methods.
???
Цитата:
Он возвращает новый массив, в который копирует элементы, начиная с индекса start и до end (не включая end).
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами, help! tvv90 Общие вопросы Javascript 11 02.02.2016 10:34
Работа с массивами BorisBritva jQuery 6 23.02.2014 18:31
Замена значения в store страно работает I3ev ExtJS 0 09.12.2012 14:22
Работа с массивами. Требуется помощь. Кристи Общие вопросы Javascript 3 08.02.2011 18:00
работа с массивами one-two Работа 11 31.01.2011 16:30