Amir Hossain
Amir Hossain

Reputation: 79

create common function in typescript

I have two list

men=['x','y','z']
women=['a','b','c'];

and two vabriable to show in html

selectedMan;
selectedWoman;

i want to create a common select method

select(index,source,destination){
  destination=source[index];
}

function call

this.select(2,this.men,this.selectedMan);
this.select(1,this.women,this.selectedWoman)

html

<p>Welcome to team {{selectedMan}}</p>
<p>Welcome to team {{selectedWoman}}</p>

but in html only show welcome to team

Upvotes: 0

Views: 1071

Answers (2)

JB Nizet
JB Nizet

Reputation: 691695

Arguments are passed by value, not by reference. All your function does is to change the value of the local variable destination. So it actually does nothing.

Frankly, I don't see the point. Even if it worked,

this.select(1,this.women,this.selectedWoman) 

is longer, and less clear than

this.selectedWoman = this.women[1];

If you really wanted such a function, you would need, for example

select(index: number, array: Array<string>, callback: (s: string) => void) {
  callback(array[index]);
}

and use it this way:

this.select(1, this.men, s => this.selectedMan = s); 

Or (but this is less safe, and doesn't allow for minification):

select(index: number, array: Array<string>, property: string) {
  this[property] = array[index]);
}

and call it like this:

this.select(1, this.men, 'selectedMan');

Upvotes: 2

Vikas
Vikas

Reputation: 12036

If you want to create a common function do it the right way.Learn the difference between pass by value and pass by reference. What's the difference between passing by reference vs. passing by value?

Solution

Method definition

select(index,source){
 return source[index];
}

method call

 this.selectedMan=this.select(2,this.men)
 this.selectedWoman=this.select(1,this.women);

Upvotes: 2

Related Questions