1

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

3 Answers 3

4

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))

Sign up to request clarification or add additional context in comments.

Comments

0

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))

1 Comment

You don't need to single out secondLast
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.