Как заполнить массив числами от 100 до 0?
Мне необходимо создать переменную «start» = 100 и пустой массив «result». Затем создать цикл, который заполнит массив «result» значениями от 100 до 0 включительно при помощи декремента. Мой код:
var start = 100; var result = []; while (start >= 0) < result.push(start--); >alert(result);
Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
задан 2 фев 2017 в 12:14
Александр Мураховский Александр Мураховский
63 1 1 золотой знак 2 2 серебряных знака 7 7 бронзовых знаков
Какой такой отсчёт? Код цикла можно оптимизировать до start = 0;
2 фев 2017 в 12:16
в модульном окне начинает отминусовывать начиная с 99,а должен от 100.т.е первое число в модальном окне должно быть 100,далее 99,98,97 и т.д до ноля.А у меня начинает отсчет в модальном окне с 99,почему?
2 фев 2017 в 12:21
@АлександрМураховский Вы привели не весь код. В этом коде Вы получаете массив из 1 элемента и start = 0;
2 фев 2017 в 12:24
@АлександрМураховский в приведенном коде нет ни вашего окна ни хоть какого-нибудь вывода, поэтоу сказать сложно, разве только то, что скорее всего вывод осуществляется после декремента
2 фев 2017 в 12:24
вы наверно проверку на число делаете ПОСЛЕ start—; ..а нужно ДО
2 фев 2017 в 12:24
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
// 1.Создать переменную«start» = 100 и пустой массив «result». var start = 100; var result = []; // 2.Создать цикл,который заполнит массив «result» значениями от 100 до 0 включительно при помощи декремента. while (start >= 0) < result.push(start--); >console.log(result);
Отслеживать
ответ дан 2 фев 2017 в 12:38
27.2k 2 2 золотых знака 45 45 серебряных знаков 76 76 бронзовых знаков
выводит сразу все цифры.а должен считать при каждом нажатии на кнопку «ок»,т.е от 100-0 включительно.
2 фев 2017 в 12:51
Я сдаюсь, Ваше тех.задание слишком быстро меняется.
2 фев 2017 в 12:54
Спасибо огромное!Ваш код мне помог,все правильно!!
2 фев 2017 в 15:22
Довольно извращенный и медленный способ, но в одно выражение, просто забавы ради. Создает массив, заполненный значениями от 0 до 99:
(new Array(100)).fill(1).map((a,i)=>i) [].map.call('_'.repeat(100), (a,i)=>i)
Соответственно этот код создаст массив, заполненный значениями от 100 до 0:
(new Array(101)).fill(1).map((a,i)=>i).reverse() [].map.call('_'.repeat(101), (a,i)=>i).reverse()
Array.prototype.fill()
Метод fill() заполняет все элементы массива от начального до конечного индексов одним значением.
Интерактивный пример
Синтаксис
arr.fill(value[, start = 0[, end = this.length]])
Параметры
Значение, заполняющее массив.
Необязательный параметр. Начальный индекс.
Необязательный параметр. Конечный индекс.
Возвращаемое значение
Описание
Элементы заполняются в полузакрытом интервале [ start , end ).
Метод fill принимает до трёх аргументов — value , start и end . Аргументы start и end являются необязательными со значениями по умолчанию, равными 0 и length объекта this соответственно.
Если аргумент start является отрицательным, он трактуется как length+start , где length — это длина массива. Если аргумент end является отрицательным, он трактуется как length+end .
Метод fill намеренно является обобщённым, он не требует, чтобы значение this внутри него было объектом Array .
Метод fill является изменяющим методом, он изменит объект this и вернёт его, а не просто вернёт копию.
Если аргумент value является объектом, то метод fill заполнит массив ссылками на этот объект.
Примеры
[1, 2, 3].fill(4); // [4, 4, 4] [1, 2, 3].fill(4, 1); // [1, 4, 4] [1, 2, 3].fill(4, 1, 2); // [1, 4, 3] [1, 2, 3].fill(4, 1, 1); // [1, 2, 3] [1, 2, 3].fill(4, 3, 3); // [1, 2, 3] [1, 2, 3].fill(4, -3, -2); // [4, 2, 3] [1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3] [1, 2, 3].fill(4, 3, 5); // [1, 2, 3] Array(3).fill(4); // [4, 4, 4] [].fill.call(< length: 3 >, 4); // // Объекты заполняются по ссылке. var arr = Array(3).fill(<>) // [<>, <>, <>]; arr[0].hi = "hi"; // [< hi: "hi" >, < hi: "hi" >, < hi: "hi" >]
Полифил
if (!Array.prototype.fill) < Object.defineProperty(Array.prototype, 'fill', < value: function(value) < // Шаги 1-2. if (this == null) < throw new TypeError('this is null or not defined'); >var O = Object(this); // Шаги 3-5. var len = O.length >>> 0; // Шаги 6-7. var start = arguments[1]; var relativeStart = start >> 0; // Шаг 8. var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len); // Шаги 9-10. var end = arguments[2]; var relativeEnd = end === undefined ? len : end >> 0; // Шаг 11. var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len); // Шаг 12. while (k < final) < O[k] = value; k++; >// Шаг 13. return O; > >); >
Если вам нужно поддерживать действительно устаревшие движки JavaScript, которые не поддерживают Object.defineProperty, то лучше вообще не использовать полифилы для методов Array.prototype, так как вы не можете сделать их не перечисляемыми.
Спецификации
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype.fill |
Совместимость с браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 3 авг. 2023 г. by MDN contributors.
Your blueprint for a better internet.
Как заполнить массив случайными числами js
Получаем массив, заполненный случайными числами в диапазоне от -50 до 50.
Документация:
20 декабря 2021
Тут придётся написать собственную функцию.
const generateArray = (length, max) => ( [. new Array(length)] .map(() => Math.round(Math.random() * max)) );
Как видите мы генерируем массив нужной длины используя конструктор Array . Далее с помощью метода map() мы преобразовываем каждый элемент нашего пустого массива, таким образом заполняя его элементами со случайными числовыми значениями. От нуля до max. Посмотрим на нашу функцию в действии:
const numbers = generateArray(10, 40); console.log(numbers); //=> [36, 5, 9, 35, 23, 38, 27, 35, 34, 6]
5 способов создать массив в JavaScript
elementN — элементы, из которых создаётся массив.
- Литерал массива — это список из нуля или более выражений, каждое из которых представляет элемент массива, заключенный в квадратные скобки ( [] ). Когда вы создаете массив, используя литерал массива, он инициализируется с помощью переданных значений, которые будут являться его элементами, длина массива будет равна числу переданных аргументов.
- Создание пустого массива
const array = [];
- Создание массива и инициализация (создание одного элемента не имеет особенностей)
const array = [0, false, ''];
- Можно указывать не все значения, пропущенные элементы будут иметь значение undefined
const array = [0, ,2];
1.2. Через конструктор Array()
new Array(element0, element1[, . [, elementN]])
new Array(arrayLength)
elementN — элементы, из которых создаётся массив.
arrayLength — длина массива (количество элементов )
- создание пустого массива
const array = new Array();
- массив с инициализацией (в примере массив с двумя элементами. Значение первого элемента — 1, значение второго элемента — 2). Данная запись возможна только при числе элементов от двух.
const array = new Array(1,2);
- массив с заданной длинной, но не инициализированным(-и) значением(-ями). В данном примере длина массива (array.length) будет 3 элемента, значение элементов — undefined.
const array = new Array(3);
1.3. Объявление массива как функцию
- Если вызовем Array как функцию, будет создан новый объект Array. Этот метод вызывает конструктор Array, поэтому примеры выше будут выглядеть следующим образом:
//создание пустого массива
const array1 = Array();//создание массива и инициализация
const array2 = Array(1,2);//создание массива с заданной длинной
const array3 = Array(3);
1.4. С помощью метода Array.of()
Array.of(element0[, element1[, . [, elementN]]])
elementN — элементы, из которых создаётся массив.
- Этот метода создаёт новый экземпляр массива Array из произвольного числа аргументов.
Формальные способы закончены, но … есть способы создания массива из другого массива
Способ № 2 (копирование)
2.1. Создание массива с помощью копирования — метод slice(begin, end).
arr.slice([begin[, end]])
begin — индекс, с которого начинается извлечение.Если индекс отрицательный, begin указывает смещение от конца последовательности. Если begin опущен, slice() начинает работать с индекса 0 .
end — индекс, по которому заканчивается извлечение. Если индекс отрицательный, end указывает смещение от конца последовательности. Если end опущен, slice() извлекает все элементы до конца последовательности ( arr.length ).
Возвращает новый массив, старый не изменяется
- Метод slice() позволяет копировать массив полностью или частично. Этот метод принимает два аргумента slice(begin, end). Первый — begin указывает на индекс элемента с которого будет копирование массива, второй — end до какого индекса (не включительно). Если второй аргумент не определён (undefined), то копирование до конца массива. slice() — частный случай, где begin и end — не определены. В примере array2 — получит все элементы массива array
const array = [1, 2, 3];
const array2 = array.slice();
//array [1, 2, 3]
//array2 [1, 2, 3]
2.2. Создание массива с помощью копирования — метод concat()
var new_array = old_array.concat(value1[, value2[, . [, valueN]]])
valueN — массивы и/или значения, соединяемые в новый массив.
Возвращает новый массив, старый не изменяется
- Метод concat() без аргументов — копирует массив полностью. Принимает множество аргументов, которые добавляются значениями в новый массив в конец. Если значение массив, то будет добавлены значения этого массива (но, не объекты).
const array = [1, 2, 3];
const array2 = array.concat()
//array2 [1, 2, 3]
Способ № 3 (изменение существующего)
3.1. Создание массива из другого путём изменения первого — метод splice().
array.splice(start, deleteCount[, item1[, item2[, . ]]])
start — индекс, по которому начинать изменять массив. Если больше длины массива, реальный индекс будет установлен на длину массива. Если отрицателен, указывает индекс элемента с конца.
deleteCount — целое число, показывающее количество старых удаляемых из массива элементов. Если deleteCount равен 0, элементы не удаляются. Если deleteCount больше количества элементов, начиная с индекса start будут удалены все элементы до конца массива.
itemN — необязательные параметры. Добавляемые к массиву элементы.
- Без аргументов метод splice() возвращает пустой массив. Когда указан первый аргумент — splice(1) — удаляет все элементы базового массива, начиная с указанного индекса и массив из удалённых элементов. Второй аргумент в методе splice(1, 2) указывает на количество удаляемых элементов. Если указано 0- удалять не будет. Все последующие аргументы этого метода будут добавлены как элементы массива на место удалённых элементов
const array = [1, 2, 3];
const array2 = array.splice();
const array3 = array.splice(0, 3, 5, 2, 3)
//array = [1, 2, 3]
//array2 = []
//array3 = [1, 2, 3], но array имеет новые значения [5, 2, 3]
Способ № 4. (из объекта)
4.1. Создание массива с помощью метода from()
Нужно оговорить, что объект, из которого создаём массив должен быть массивоподобным или инерируемым
Array.from(arrayLike[, mapFn[, thisArg]])
arrayLike — массивоподобный или итерируемый объект, преобразуемый в массив.
mapFn — необязательный параметр. Отображающая функция, вызываемая для каждого элемента массива.
thisArg — необязательный параметр. Значение, используемое в качестве this при выполнении функции mapFn .
- Простой пример создания с помощью этого метода массива из строки
const array = Array.from('text'); //array = ['t','e','x','t']
Способ № 5. Array comprehension
Этот способ назвала синтаксисом, который был доступен в черновике ECMAScript2015. Array comprehension — это JavaScript-выражение, которое позволяет быстро создавать новый массив из существующего. Данный синтаксис не стандартен, поэтому вместо него рекомендованы следующие:
5.1. Создание нового массива с помощью метода filter()
var newArray = arr.filter(callback[, thisArg])
callback — функция, которая будет вызвана для каждого элемента массива. Если функция возвращает true , то элемент добавляется в новый массив, если false , то не добавляется. В функцию будет передано три аргумента: element , index , array .
element — текущий обрабатываемый элемент в массиве.
index — необязательный параметр. Индекс текущего обрабатываемого элемента в массиве.
array — необязательный параметр. Массив, по которому осуществляется проход.
thisArg — необязательный параметр. Значение, используемое в качестве this при вызове функции callback .
- Способ создания нового массива из существующего с элементами, для которых результат выполнения функции (передали первым аргументом) будет true .
const array = ['t', 'e', 'x', 'text'];
const array2 = array.filter(char => char.length < 2);
//array2 = ['t', 'e', 'x']
5.2. Создание нового массива с помощью метода map()
var new_array = arr.map(function callback(currentValue, index, array) <
// Возвращает элемент для new_array
>[, thisArg])
callback — функция, создающая элемент в новом массиве, принимает три аргумента: currentValue — текущий обрабатываемый элемент массива. index — индекс текущего обрабатываемого элемента в массиве. array — массив, по которому осуществляется проход.
thisArg — необязательный параметр. Значение, используемое в качестве this при вызове функции callback .
- Метод вызывает функцию один раз для каждого элемента базового массива и результат выполнения будет элементом нового массива. В примере каждый элемент массива возводиться степень 2 (умножается сам на себя). Если функция из примера будет возвращать return elem; , то мы просто с помощью этого метода скопируем базовый массив.
const array = [1, 2, 3, 4];
const array2 = array.map(elem =>elem ** 2);//array2 = [1, 4, 9, 16];
5.3. С помощью оператора расширения spread
- в литерах массива:
[. iterableObj, 4, 5, 6]
- при деструктурирующем присваивании
[a, b, . iterableObj] = [1, 2, 3, 4, 5];
iterableObj — обязательный. Итерируемый объект.
- Пример для деструктурирующего присваивания. Вообщем-то, это оператор rest — противоположность spread — собирает множество в один массив. В данном случае, множество, это всё, кроме первого элемента (index ==0), которое решили присвоить переменной name.
const array = ['Olga', 't', 'e', 'x', 't'];
const [name, . restElement] = array;
const array2 = restElement;
//array без изменения, name = 'Olga', array2 = ['t', 'e', 'x', 't']
- А в этом примере получилось копирование, аналогично методу slice():
const array = [1, 2, 3];
const array2 = [. array];
//array [1, 2, 3]
//array2 [1, 2, 3]
5.4. С помощью стрелочных функций
Синтаксис очень объемный, поэтому оставлю ссылку на него
- Стрелочные функции отличаются от обычных тем, что у них нет собственного объекта аргумента и контекста this.
- В примере создали функцию, которая возвращает массив элементов, которые передали аргументами с помощью оператора rest
const array = (. rest) => rest;
array(1, 2, 3);
//array [1, 2, 3]
- С помощью стрелочной функции и метода from() можно получить результат примера с методом map():
const array = Array.from([1, 2, 3, 4], x => x ** 2);
// [1, 4, 9, 16]
Мне кажется, что я изрядно утомила читателя, но смогла объяснить разные способы создания массива.
['Спасибо','за','внимание'].join(' ');
