Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вернуть массив заданного размера (https://javascript.ru/forum/misc/84145-vernut-massiv-zadannogo-razmera.html)

NovichokJS 15.06.2022 14:54

Вернуть массив заданного размера
 
Нужно чтобы число, передаваемое в функцию указывало на ее размер. Ф-ция должна вернуть массив заданной размерности, каждым элементом которого будет ф-ция, которая возвращает свой индекс в массиве.
Пример работы: createArrayOfFunctions(9)[5](); // 5

Помогите плиз, пытаюсь сделать, получаю пустой массив:

const createArrOfFunc = num => {

    let arr = [];
    if (typeof number !== 'number') { return null; }
    for (let i = number; i < number; i += 1) {
        function func(i) {
            return i;
        }
        arr.push(func);
    }
    
    return arr;
}

рони 15.06.2022 15:19

Цитата:

Сообщение от NovichokJS
ф-ция, которая возвращает свой индекс в массиве.

const createArrOfFunc = length => {
            let arr = Array.from({
                length
            }, _ => function fn() {
                return arr.indexOf(fn)
            })
            return arr;
         }

        let a = createArrOfFunc(5);
        alert(a[2]());

voraa 15.06.2022 15:31

Цитата:

Сообщение от NovichokJS
вернуть массив заданной размерности

Размерность и размер массива это две большие разницы.

Vlasenko Fedor 15.06.2022 16:03

const createArrOfFunc = length => Array.from({length}, (_, v) => _ => v);

:dance:

ksa 15.06.2022 16:12

рони, мне показалось ты малость перемудрил... :)
const createArrOfFunc = length => {
	let arr = Array.from(
		{length}, 
		(val, i) => _ => i
	)
	return arr;
}

let a = createArrOfFunc(5);
alert(a[2]());

ksa 15.06.2022 16:13

Опередили... :(

рони 15.06.2022 16:41

Цитата:

Сообщение от ksa
перемудрил...

Цитата:

Сообщение от NovichokJS
ф-ция, которая возвращает свой индекс в массиве.

ой ...
const createArrOfFunc = length => {
	let arr = Array.from(
		{length},
		(val, i) => _ => i
	)
	return arr;
}

let a = createArrOfFunc(5);
a.splice(2, 1);
alert(a[2]());

ksa 15.06.2022 16:45

рони, вона ты докуда занырнул! :victory:

NovichokJS 15.06.2022 17:34

Цитата:

Сообщение от рони (Сообщение 546170)
ой ...
const createArrOfFunc = length => {
	let arr = Array.from(
		{length},
		(val, i) => _ => i
	)
	return arr;
}

let a = createArrOfFunc(5);
a.splice(2, 1);
alert(a[2]());

Ф-ция должна вернуть массив заданной размерности, каждым элементом которого будет ф-ция, которая возвращает свой индекс в массиве.
При выполнении вашего кода получается массив из анонимных функций:
[
  [Function (anonymous)],
  [Function (anonymous)],
  [Function (anonymous)],
  [Function (anonymous)]
]
3

voraa 15.06.2022 17:48

Функция может либо иметь имя, либо быть анонимной.
А какие имена должны быть у этих функций?

Так размер массива или размерность?
[0,1,2,3,4] - это массив размерности 1 (размер - 5)

[
[1,2,3],
[4,5,6],
[7,8,9]
] - это массив размерности 2

рони 15.06.2022 18:13

NovichokJS,
что-то не так?

NovichokJS 15.06.2022 18:42

Цитата:

Сообщение от рони (Сообщение 546177)
NovichokJS,
что-то не так?

да, уточню условие - https://prnt.sc/g-dG5cNM5Pod

рони 15.06.2022 18:58

NovichokJS,
добавьте проверку числа в любой из предложенных выше вариантов, самостоятельно.
а лучше исправьте ошибки в строках 1, 5, 6, и будет вам счастье.
const createArrOfFunc = num => {

    let arr = [];
    if (typeof number !== 'number') { return null; }
    for (let i = number; i < number; i += 1) {
        function func(i) {
            return i;
        }
        arr.push(func);
    }
    
    return arr;
}

NovichokJS 15.06.2022 19:17

Рони, поправил:
const createArrOfFunc = number => {
    let arr = [];
    if (typeof number !== 'number') { return null; }
    if (number != undefined) {
        for (let i = 0; i < number; i += 1) {
            function func(i) {
                return i;
            }
            arr.push(func);
        }
    } else { return []; }

    return arr;
}


но не знаю как в шестой строке поправить. Подскажите пожалуйста

рони 15.06.2022 19:23

Цитата:

Сообщение от NovichokJS
но не знаю как в шестой строке поправить.

уберите лишний символ

рони 15.06.2022 19:25

NovichokJS,
да и надо было только, исправить ошибки, а не добавлять код)))

NovichokJS 15.06.2022 19:26

Цитата:

Сообщение от рони (Сообщение 546181)
уберите лишний символ

аа...я понял просто func()

NovichokJS 15.06.2022 19:27

но единственное теперь осталось - это путой массив всё равно что-то не возвращает.

NovichokJS 15.06.2022 19:34

как тут корректно описать логику что если аргумент не передан то вернуть пустой массив

рони 15.06.2022 19:34

NovichokJS,
const createArrOfFunc = (number = 0) => {
    if (typeof number !== 'number') { return null; }
    let arr = [];
    for (let i = 0; i < number; i += 1) {
        function func() {
            return i;
        };
        arr.push(func);
    }

    return arr;
}
console.log(createArrOfFunc(9)[5]());
console.log(createArrOfFunc());
console.log(createArrOfFunc('test'));

NovichokJS 15.06.2022 19:38

понял, спасибо!


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