2013-02-08 14 views
7

मैं जावास्क्रिप्ट में ["Susy", "John", "Mary"] से "Susy, John, and Mary" जैसे सरणी कैसे बदल सकता हूं? मैं अपने सिर से रूबी की to_sentence विधि नहीं प्राप्त कर सकता।वाक्य के लिए जावास्क्रिप्ट ऐरे

+2

नहीं इतनी गंभीरता से, लेकिन .. '[" Susy "," जॉन "," मेरी "]। में शामिल होने के (',')। विभाजन (/, एम /)। में शामिल होने के ('और एम'); ' – jAndy

उत्तर

6

पिछले एक को छोड़कर सभी वस्तुओं में शामिल हों, और फिर उस जोड़ें:

var s = arr.slice(0, arr.length - 1).join(', ') + ", and " + arr.slice(-1); 

डेमो: http://jsfiddle.net/JYKcK/1/

+0

सिर्फ एक नोट- अमेरिकियों ने "और" से पहले एक अल्पविराम रखा। ओपी ने यह किया है। – Popnoodles

+0

@popnoodles: आह, तो आप बस '+" और "+' का उपयोग करेंगे। – Guffa

+0

मैं इस विधि के साथ चला गया। – Corey

1

आप) .join उपयोग कर सकते हैं (और एक साथ अंतिम मान पहले जोड़ें "और"

var array = ['susy', 'john', 'mary']; 

array[array.length-1] = 'and '+array[array.length-1]; 

//string is "susy, john, and mary" 
var string = array.join(', '); 
+0

मुझे इस विधि के बारे में पता है, मैं आखिरी वस्तु से पहले" और "चाहता हूं। – Corey

+0

मेरा बुरा, मैंने "और" नहीं देखा ... मुझे – joeltine

-1
var arr = ["Susy", "John", "Mary"]; 
var str = arr.join(", "); 
+1

फिर से कारक बनाने दें, यह "सस्सी, जॉन, मैरी" का उत्पादन करता है, जो वांछित परिणाम नहीं है। – pjmorse

2

पिछले संशोधित तो शामिल होने

+०१२३५१६४१०६
var source = ["Susy", "John", "Mary"]; 
source.push('and ' +source.pop()); 
console.log(source.join(', '))// Susy, John, and Mary 
+0

ठीक है यह कामुक है :) लेकिन क्या यह पहले से एक अल्पविराम जोड़ने के लिए व्याकरणिक रूप से सही है? – mika

+0

1 और 2 तत्वों के लिए काम नहीं करता है: ["Susy"] => "और Susy"। ["सूसी", "जॉन"] => "सूसी, और जॉन" –

2

कि प्रयास करें:

var array = ['susy', 'john', 'mary']; 
var last = array.pop(); 
var string = array.join(', ') + " and " + last; 

मैं टी कोशिश didn लेकिन आप विचार

1

और एक और समाधान मिलना चाहिए:

(function(a) { 
    var b = (a||(a=[])).pop(); 
    return (b ? a.length ? [a.join(", "),b] : [b] : a).join(" and "); 
})(["Susy", "John", "Mary"]); 

या बस में अपने माणिक की तरह सजा विधि को परिभाषित सरणी का प्रोटोटाइप:

Array.prototype.sentence = function(comma,and) { 
    var b = this.pop(); 
    return (b ? this.length ? [this.join(comma||", "),b] : [b] : this).join(and||" and "); 
}; 

["Susy", "John", "Mary"].sentence(); 
//"Susy, John and Mary" 

["Susy", "John", "Mary"].sentence(" and ", " as well as "); 
//"Susy and John as well as Mary" 

["Susy", "John", "Mary", "Helmut"].sentence(); 
//"Susy, John, Mary and Helmut" 
3

एक अन्य विकल्प, Array.prototype.reduce का उपयोग कर, होगा:

var arr = [1,2,3]; 
arr.reduce(
    function(prev, curr, i){ 
    return prev + curr + ((i===arr.length-2) ? ' and ' : ', ') 
    }, '') 
.slice(0, -2); 

उत्पादन "1, 2 and 3"

2

इस एक में कुछ अतिरिक्त मामलों के होते हैं:

  1. हम "और" (ऑक्सफोर्ड कॉमा) से पहले एक अल्पविराम
  2. किसी भी तरह से, हम एक अल्पविराम यदि नहीं करना चाहते हैं करना चाहते हैं

    : वहाँ केवल 2 तत्वों
  3. अगर वहाँ केवल 1 तत्व है मैं यह उन उपयोग के मामलों के सभी फिट बैठता है लगता है कि हम सिर्फ इतना है कि शब्द लौटे

चाहते हैं,

function joinSentence(array, oxford_comma){ 
    if(array.length > 1){ 
    var lastWord = " and " + array.pop(); 
    if(oxford_comma && array.length > 1){ 
     lastWord = "," + lastWord; 
    } 
    }else{ 
    var lastWord = ""; 
    } 
    return array.join(", ") + lastWord; 
} 
+0

यह सही जवाब होना चाहिए! – mech

2
toSentence = function(arr){ return arr.join(", ").replace(/,\s([^,]+)$/, ' and $1');}; 

toSentence(['dogs', 'cats']);   // => dogs and cats 

toSentence(['dogs', 'cats', 'snakes']); // => dogs, cats and snakes 
संबंधित मुद्दे