Задать вопрос
@campus1

Как создать общую функцию?

Привет.
Ребят подскажите как создать общую функцию, что-бы её можна было использовать для всех массивов.
Например:
const arr = [1 , 2 ,3];
const arr2 = [2, 3, 4];
Array.prototype.sum = function (){
	let sum = 0;
	for(let i = 0; i < arr.length; i++){
		sum += arr[i]
	}
	return sum;
}

Для каждого массива считало его значение.
Если для arr, то arr.sum() = > 6
Если для arr2, то arr2.sum() = > 9
И т.д
  • Вопрос задан
  • 291 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Измените «arr» на «this». Учитывайте, что создание методов встроенных в движок js объектов — плохая практика.

Но если вы уж хотите, то в любом случае ваш способ не верный. Дело в том, что при перечислении ячеек массива, при созданном методе вашим способом, он всегда будет попадать в перечисления вида:
Array.prototype.sum = function() { /** ... */ }
const arr = [1, 2, 3]

// console.log в этом цикле выведет в консоль: 0, 1, 2, sum
// Т.е. «sum» всегда будет попадать в for..in-перечисления любых массивов в коде
for (let i in arr) {
    console.log(i) 
}

Понимаете, что это может не только помешать вам, но и сломать существующий код в подключенных библиотеках. Что бы избежать подобного, используйте следующий код:
Object.defineProperty(Array.prototype, 'sum', {
    enumerable: false,
    value: function() {
        let sum = 0
        
        for (let i = 0; i < this.length; i++) {
            if (typeof this[i] !== 'number' && !(this[i] instanceof Number)) {
                throw new TypeError('Нечисловой массив')
            }

            sum += this[i]
        }
        
        return sum
    }
})

А еще лучше, используйте отдельно созданную функцию, принимающую массив в аргументах.
Ответ написан
Deonisius
@Deonisius
Родился в 11110110111 году, 11000 января.
Array.prototype.sum = function() {
    let sum = 0;
    for (let i = 0; i < this.length; i++) {
        sum += this[i];
    }
    return sum;
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы