2016-09-02 1 views
2

Я пытаюсь закончить эту программу и столкнулся с проблемой, которую я не могу понять. Я хочу изменить массив чисел в строку своих порядковых счетных частей, которые я завершил с помощью этой программы, я просто хотел бы, чтобы последнее значение покидало конкатенированное «,» (запятое). Я попытался использовать оператор if, но не могу заставить его работать.Как оставить запятую вне конца массива?

function getGetOrdinal(n) { 
var s=["th","st","nd","rd"], 
    v=n%100; 
return n+(s[(v-20)%10]||s[v]||s[0]); 
} 

var nums = [1, 2, 3, 4] 
var n = ""; 
for (var i = 0; i <= getGetOrdinal(4).length; i++) { 
     if (n < getGetOrdinal(n)) { 
      n += getGetOrdinal(nums[i]) + ', '; 
       console.log(n); 
    } 
} // ['1st, 2nd, 3rd, 4th'] < ~ expected result 
+0

Как насчет 'Array # join'? – Rayon

+0

Я просто * люблю * это элегантное решение для генерации порядковых номеров. Это было опубликовано ранее на [shopify] (https://ecommerce.shopify.com/c/ecommerce-design/t/ordinal-number-in-javascript-1st-2nd-3rd-4th-29259). – cars10m

ответ

3

Вот два варианта:

Один из способов, чтобы добавить проверку внутри цикла for, который PREPEND запятую только если это не первая итерация цикла:

for (var i=0; i <= getGetOrdinal(4).length; i++) { 
    if (n < getGetOrdinal(n)) { 
     if (i > 0) { 
      n += ', '; 
     } 
     n += getGetOrdinal(nums[i]); 
    } 
} 
console.log(n); 

Другим вариантом было бы оставить свой код, как есть, но затем подстроку с запятой запятой:

for (var i=0; i <= getGetOrdinal(4).length; i++) { 
    if (n < getGetOrdinal(n)) { 
     n += getGetOrdinal(nums[i]) + ', '; 
    } 
} 

//n = n.substring(0, n.length - 2); 
n = n.slice(0, -2); 
console.log(n); 
+0

Для второго варианта проще использовать 'n = n.slice (0, -2)'. – nnnnnn

4

Вы можете просто сделать:

var nums = [1, 2, 3, 4] 
> undefined 
nums.map(getGetOrdinal).join(', ') 
> "1st, 2nd, 3rd, 4th" 
2

Вы можете использовать Array.prototype.join присоединиться массив с указанным разделителем:

function getGetOrdinal(n) { 
 
    var s = ["th","st","nd","rd"], 
 
     v = n % 100; 
 
    return n + (s[(v - 20) % 10] || s[v] || s[0]); 
 
} 
 

 
var nums = [1, 2, 3, 4]; 
 
var numsWithOrdinal = nums.map(getGetOrdinal); 
 

 
var joined = numsWithOrdinal.join(', '); 
 
console.log(joined);

+0

@nnnnnn О, спасибо :) Задумывался о противоположной операции. Английский язык не является моим основным языком. –

+1

Я был просто педантичен. Английский язык является моим * единственным *, поэтому я восхищаюсь всеми, кто говорит на нескольких языках. – nnnnnn

Смежные вопросы