Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629

Может ли кто объяснить механизм работы метода slice () для массива массивов?

04.03.2014, 15:11. Показов 1482. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задача 1:
имеем массив из N элементов
необходимо вывести первый и последний элемент этого массива, используя метод slice ()

решение задачи 1:
JavaScript
1
2
3
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; // надо вывести 0 и 9
alert ('Первый = ' + arr.slice (0, 1));   // выводит 0, что и требовалось
alert ('Последний = ' + arr.slice (-1));  // выводит 9, что и требовалось
задача 2:
имеем массив из N элементов, каждый из которых - тоже массив
необходимо вывести первый элемент первого элемента и последний элемент последнего элемента этого массива, используя метод slice ()

попытка решения задачи 2 аналогичным способом:
JavaScript
1
2
3
var arr = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]];            // надо вывести 0 и 9
alert ('Первый первого = ' + arr.slice (0, 1).slice (0, 1));   // выводит почему-то 0,1
alert ('Последний последнего = ' + arr.slice (-1).slice (-1)); // выводит почему-то 8,9
при этом решение задачи 2 с использованием свойства length даёт верный ответ:
JavaScript
1
2
3
var arr = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]];
alert ('Ïåðâûé ïåðâîãî = ' + arr [0] [0]);
alert ('Ïîñëåäíèé ïîñëåäíåãî = ' + arr [arr.length - 1] [arr [arr.length - 1].length - 1]);
PS. пробовал различные комбинации, проверял typeof элементов...
предположил поначалу, что метод slice (), оказывается , преобразует возвращаемый элемент как бы в его примитив, но в документации ничего об этом не нашёл
но это не примитив, так как alert (typeof arr.slice (0, 1)) возвращает object
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.03.2014, 15:11
Ответы с готовыми решениями:

Аналог метода slice для работы с массивами
Подскажите, пожалуйста, либо наведите на мысль, как реализовать функцию, которая будет работать аналогично методу slice. Функция должна...

Кто может объяснить алгоритм работы программы?
что делает программа я знаю, но в коде разобраться не могу. Нужен алгоритм, помогите пожалуйста, буду очень признателен. Код программы: ...

Сдвиг массива | Кто может объяснить условие?
Переставить последний элемент массива на место k-го элемента. При этом k-й,(k+1)-й, ..., предпоследний элементы сдвинуть вправо на 1...

8
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
04.03.2014, 15:48
kalabuni, Так ведь slice() возвращает снова массив, а не отдельный элемент. В первой задаче массив из одного элемента успешно за кадром преобразовался в строку с помощью Array.prototype.toString(), который делает join().

Во второй задаче первый slice вернул [[0, 1]] , а не отдельный элемент [0, 1]. Из [[0, 1]] сколько угодно раз можно делать slice(0, 1) и получить такой же [[0, 1]].

А почему в первой задаче не добыть первый элемент по индексу [0]? Тогда во второй задаче так же двойной [0][0]. Ну а для последнего элемента [0] после каждого slice()
JavaScript
1
.slice(-1)[0].slice(-1)[0]
1
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
04.03.2014, 15:55
В браузере консоль с таких случаях более-менее наглядно показывает, что там на самом деле этакое получается:
Изображения
 
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
04.03.2014, 15:56  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
А почему в первой задаче не добыть первый элемент по индексу [0]?
пробовал решить вообще без length и без индексов

спс за разъяснения

не "въехал" я во фразу Returns a section of an array в документации
1
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
04.03.2014, 15:58
JavaScript
1
2
3
4
5
6
7
8
var arr = [[0,1],[2,3],[4,5],[6,7],[8,9]];            // надо вывести 0 и 9
 
    var newarr = arr.slice(0, 1); // вроде как вернуть должны массив [0, 1] ...
                                  // но на самом деле возвращается обертка в виде массива на массивом: [[0,1]];
                                  // проверяем так ли это:
 
    alert(newarr[0]); // 0,1 - строковое представление, но чтобы точно убедиться выведем тип заимствуя строковое представление обычного объекта:
    alert(Object.prototype.toString.call(newarr[0])); // [object Array]
Добавлено через 54 секунды
Ох уже ответили Ну ладно
0
Superposition
 Аватар для Padimanskas
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
04.03.2014, 16:01
JavaScript
1
2
3
var arr = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]];            // надо вывести 0 и 9. Так, так... ))
alert ('Первый первого = ' + arr.slice(0, 1)[0].slice(0, 1));   // ой :D
alert ('Последний последнего = ' + arr.slice(-1)[0].slice(-1)); // ой-ой-ой :D
Я тоже опоздал ))
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
04.03.2014, 16:24  [ТС]
упс, а в заголовке темы я другой метод указал splice ()
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
04.03.2014, 16:41
Цитата Сообщение от Vovan-VE Посмотреть сообщение
В браузере консоль с таких случаях более-менее наглядно показывает, что там на самом деле этакое получается:
Вспомнилась знаменитая презентация: Wat.
0
04.03.2014, 16:55

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
Вспомнилась знаменитая презентация: Wat.
Угу, это чудо не забуду. :D Они там либо JS не знали, либо-таки по-настоящему шутки ради потроллили некоторые "тонкие" места.
Плюс там консоль выдавала результат ToString(). Но что скрыто за ним — не видно.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2014, 16:55
Помогаю со студенческими работами здесь

Подскажите механизм работы метода
Есть задача, дан массив int mas = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; вот такого вида. Задача такая вывести его в виде телефонного номера...

Хочу освоить метод сортировки слиянием. Может кто-либо объяснить где и для чего его лучше применять.
Всем здравствуйте! Вновь мне нужна помощь по С#. Я хочу освоить метод сортировки слиянием. Может кто-либо объяснить где и для чего его...

Кто может объяснить a = a + b?
Сейчас разбирал функцию for. Но суть не в этом. Меня застопорило такое уравнение: sum = sum + i. Я совершенно не могу понять его смысла и...

Кто может объяснить?
Кто может объяснить как это делать? Задание 1. В оперативной памяти вектор int X расположен, начиная с адреса B7F0. Какие значения примут...

кто может объяснить синтаксис
кто может объяснить синтаксис при встрече в Барнауле, могу подъехать в любое время пм icq: 554091043


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru