sorted
здесь не функция, а результат вызова анонимной функции function (arr) { return arr.sort(function(a, b) { return a - b }) }
со значением [...this.array]
.Так что это не сама функция, которая будет вызываться снова.
PS: я должен делать это?или лучше подождать, пока мне действительно понадобятся max
, min
и т. д., и только потом получить значения?
Это, конечно, будет зависеть от вашего приложения.Если вы, вероятно, никогда не будете нуждаться в них, возможно, имеет смысл подождать.Но если вам, вероятно, понадобится какой-либо из них, особенно если вы собираетесь использовать их более одного раза, то, поскольку единственной дорогостоящей операцией является sorted
, которая в любом случае используется в некоторых других, вы могли бы также сделатьэто заранее.Таким образом, код гораздо чище.
Но если говорить о чистом коде ... если вам не нужен прототип этого объекта (то есть вы не добавляете методы к этому типу), то онможет быть проще создать это с помощью заводской функции (и, следовательно, пропустить оператор new
). Вот одна из версий:
const myArrayObj = (array, sorted = [... array].sort()) => ({
array,
sorted,
max: sorted[sorted.length - 1],
min: sorted[0],
sum: array.reduce((a, b) => a + b, 0),
unique: [... new Set(sorted)]
})
Если вы не хотите, чтобы sorted
определялся таким образом,тогда вы могли бы сделать это
const myArrayObj = (array) => {
const sorted = [... array].sort())
return {
array,
// ...
}
}
Еще один момент.Если вам нужно sorted
для себя, это нормально.Но если вы хотите, чтобы sorted
только получал max
и min
, тогда операция O(n * log(n))
неэффективна для получения значений, которые вы можете собрать в O(n)
.В зависимости от ваших данных, это может никогда не быть проблемой, но стоит подумать.