dev
dev

Reputation: 916

adding custom join on array of strings

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

Answers (3)

R4ncid
R4ncid

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

DecPK
DecPK

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

Code Maniac
Code Maniac

Reputation: 37755

You can simply use some if conditions like this.

  1. When length is less than or equal to 2 you can simply join by " & "
  2. When length is greater than 2 take the last two element and join remaining ones with ", ", 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

Related Questions