Reputation: 916
I have an array of strings and want to join the string based on a condition. So if two elements comes then it should add & in between. Using array.join I am able to achieve.
But when array of string has more than two, one condition will be last two items will be having & joined
let data1 = ["orange"]
console.log(data1.join(" & ")) // correct
let data2 = ["orange", "apple"]
console.log(data2.join(" & ")) // correct
let data3 = ["orange", "apple", "mango"]
console.log(data3.join(" & ")) // wrong => orange, apple & mango
let data4 = ["orange", "apple", "mango", "guava"]
console.log(data4.join(" & ")) // wrong => orange, apple, mango & guava
How can I add custom logic on joining the strings, I have added the expected string on data3 and data4
Upvotes: 1
Views: 999
Reputation: 7129
You could do something like this
let data1 = ["orange"]
let data2 = ["orange", "apple"]
let data3 = ["orange", "apple", "mango"]
let data4 = ["orange", "apple", "mango", "guava"]
const formatList = (list) => {
const last = list.pop()
return list.length === 0 ?
last :
[list.join(', '), last].join(' & ')
}
console.log(formatList(data1))
console.log(formatList(data2))
console.log(formatList(data3))
console.log(formatList(data4))
Upvotes: 4
Reputation: 25408
You can easily achieve the result by creating own join
function as:
function join(arr, sep) {
const clone = [...arr];
const last = clone.pop();
return clone.length ? clone.join(', ') + sep + last : last;
}
function join(arr, sep) {
const clone = [...arr];
const last = clone.pop();
return clone.length ? clone.join(', ') + sep + last : last;
}
let data1 = ['orange'];
console.log(join(data1, ' & '));
// console.log(data1.join(' & ')); // correct
let data2 = ['orange', 'apple'];
console.log(join(data2, ' & '));
// console.log(data2.join(' & ')); // correct
let data3 = ['orange', 'apple', 'mango'];
console.log(join(data3, ' & '));
// console.log(data3.join(' & ')); // wrong => orange, apple & mango
let data4 = ['orange', 'apple', 'mango', 'guava'];
console.log(join(data4, ' & '));
// console.log(data4.join(' & ')); // wrong => orange, apple, mango & guava
Upvotes: 0
Reputation: 37755
You can simply use some if conditions like this.
" & "
", "
, and add a ,
and then join last elements with " & "
let data1 = ["orange"]
let data2 = ["orange", "apple"]
let data3 = ["orange", "apple", "mango"]
let data4 = ["orange", "apple", "mango", "guava"]
function joiner(arr){
if(arr.length <= 2){
return arr.join(" & ")
} else{
let last = arr.pop()
let secondLast = arr.pop()
return arr.join(", ") + ", " + secondLast + " & " + last
}
}
console.log(joiner(data1))
console.log(joiner(data2))
console.log(joiner(data3))
console.log(joiner(data4))
Upvotes: 0