11554 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous
Je galère avec l'utilisation de ... dans des appels de fonctions
Soient deux fonctions:

function myFunction1(...items1) {
  // items1 est un array
}
function myFunction2(...items2) {  
  // items2 est un array
}


Si j'écris dans myFunction2

const result = myFunction1(items2);

myFunction1 reconnait un seul paramètre qui est un array, et non n paramètres.

Quelle est la bonne syntaxe pour appeler myFunction1 depuis myFunction2 en lui passant les contenu de items2 en paramètres ?
Modifié par Rodolphe (09 Aug 2025 - 16:59)
Modérateur
Hello,

Pourtant, c'est simple. Prenons cet exemple :

const sum = (...args) => args.reduce((a, b) => a + b)
let x = sum(1, 2, 3, 4)
console.log(x) // 10
let y = sum(1, 2, 3, 4, 5)
console.log(y) // 15


Si tu décortiques le code :

const sum = (...args) => {
  console.log(args)
  return args.reduce((a, b) => a + b)
}


Dans tous les cas, console.log te retourne un Array. Dans le premier cas,

[1,2,3,4]

Dans le deuxième cas :

[1,2,3,4,5]


Au passage, voilà la manière la plus élégante pour additionner des éléments d'un array. C'est une base. Il faut rajouter quelques exceptions.

Array.prototype.sum = function(){
  return this.reduce((a, b) => a + b)
}
let z = [123, 456, 789].sum()
console.log(z)


En laissant telquel :

let hello = ['hello', ' ', 'world'].sum()
console.log(hello)

Modifié par Niuxe (09 Aug 2025 - 22:09)
Merci de vos réponses
Le contexte

class MyClass2 {
// definit une classe d'objets
}
class MyClass3 {
// definit une classe d'objets
}
class MyClass1 {
  constructor(a, b, c, ...items) {
    this.a = a;
    this.b = b;
    this.c = c;
    this.items = [];
    this.class2Items = [];
    this.class3Items = [];
    this.addItems(...items);
  }
  addItems(...items) {
    this.items = this.items.concat(items)
    for(const item of items) {
      if(item instanceof MyClass2)
        this.class2Items.push(item);
      if(item instanceof MyClass3)
        this.class3Items.push(item);
    }
  }
}
//ailleurs dans le code
const myObject = new MyClass1(x, y, z, o21, o31, t, q);
................
myObject.addItems(q, r, o32, s, o22);