अल्पविराम द्वारा अलग किए गए स्ट्रिंग को सरणी में कैसे बदलें?


719

मेरे पास एक अल्पविराम से अलग स्ट्रिंग है जिसे मैं एक सरणी में बदलना चाहता हूं, इसलिए मैं इसके माध्यम से लूप कर सकता हूं।

क्या ऐसा करने के लिए कुछ भी बनाया गया है?

उदाहरण के लिए मेरे पास यह स्ट्रिंग है

var str = "January,February,March,April,May,June,July,August,September,October,November,December";

अब मैं इसे अल्पविराम द्वारा विभाजित करना चाहता हूं, और फिर इसे एक सरणी में संग्रहीत करता हूं।


7
बस यह टिप्पणी करना चाहता था कि यह jquery की आवश्यकता नहीं है यह जावास्क्रिप्ट का हिस्सा है।
क्रिस


4
डुप्लिकेट के बारे में: यह संदर्भित प्रश्न को 18 महीने तक पूर्व निर्धारित करता है। यदि कुछ भी हो, तो दूसरा न केवल एक
डुबकी है

40
आसान। string.split(',');
ब्रैडेन बेस्ट

4
निश्चित नहीं है कि इसे "बहुत स्थानीयकृत" के रूप में चिह्नित क्यों किया गया है। स्ट्रिंग बंटवारे एक ऊपर आता है बहुत कुछ है, और है कि आम तौर पर इंटरनेट की दुनिया भर के दर्शकों के लिए लागू (के रूप में तथ्य यह है कि मेरा उत्तर अभी भी किसी भी तरह नियमित रूप से upvotes हो जाता है इसका सबूत)। मुझे संदेह है कि 4 अन्य लोग साथ आएंगे और इसे फिर से खोलेंगे, लेकिन फिर भी। अजीब।
माचू

जवाबों:


1216
var array = string.split(',');

एमडीएन संदर्भ , limitपैरामीटर के संभवतः अनपेक्षित व्यवहार के लिए ज्यादातर उपयोगी है । (संकेत: "a,b,c".split(",", 2)बाहर आता है ["a", "b"], नहीं ["a", "b,c"])


3
लघु और मधुर, यह देखकर अच्छा लगा कि जावास्क्रिप्ट stringमें जावा की समृद्धता है String
माइकल शोप्सिन

सभी प्रकार के तारों के समर्थन के लिए सर्वोत्तम अभ्यास। यहां देखें stackoverflow.com/a/32657055/2632619
एंडी एआर

6
जबकि splitइच्छा काम ठीक करता है, तो क्या आप वाकई में तत्वों है array, के बाद से यदि आप एक सर्वर / डेटाबेस से डेटा की उम्मीद कर रहे आप मुसीबत में पड़ जाएगा ''.split(',')एक है length === 1आईई:''.split(',') === ['']
oportocala

@MichaelShopsin और All, स्प्लिट फंक्शन IE11 के साथ काम नहीं कर रहा है क्योंकि यह कहा जा रहा है कि अपरिभाषित या अशक्त संदर्भ की संपत्ति 'स्प्लिट' प्राप्त करने में असमर्थ है।
DLV

@DLV जो एक नए प्रश्न की तरह लगता है, शायद आपको स्टैकऑवरफ्लो पर पहले से ही IE सवालों के आसपास की जाँच करने के बाद पूछना चाहिए।
माइकल शोप्सिन

130

यदि आप पूर्णांक पर लक्ष्य कर रहे हैं, तो यह देखें कि जैसे 1,2,3,4,5। यदि आप अपने सरणी के तत्वों को पूर्णांक के रूप में उपयोग करने का इरादा रखते हैं और स्ट्रिंग को विभाजित करने के बाद तार के रूप में नहीं, तो उन्हें ऐसे में परिवर्तित करने पर विचार करें।

var str = "1,2,3,4,5,6";
var temp = new Array();
// this will return an array with strings "1", "2", etc.
temp = str.split(",");

इस तरह एक लूप जोड़ना

for (a in temp ) {
    temp[a] = parseInt(temp[a], 10); // Explicitly include base as per Álvaro's comment
}

पूर्णांक युक्त एक सरणी लौटाएगा, और तार नहीं।


47
कृपया ध्यान दें कि parseInt () आधार का अनुमान लगाने की कोशिश करता है जब तक कि आप इसे स्पष्ट रूप से सेट नहीं करते हैं, जो अग्रणी शून्य ( "001,002,003...") के साथ काम करते समय अप्रत्याशित परिणाम पैदा कर सकता है । तुलना parseInt('010')के साथ parseInt('010', 10)
अल्वारो गोंजालेज

3
अगर मैं कर सकता तो मैं अलवारो की टिप्पणी को और अधिक बढ़ा देता। मैंने उस पाठ को कुछ समय पहले सीखा था और इसे कभी नहीं भूला।
एंटनी स्कॉट

2
+1 यह उदाहरण अधिक स्पष्ट है, यह दर्शाता है कि स्ट्रिंग एक स्थिर वस्तु नहीं है, लेकिन वास्तव में वह चर स्ट्रिंग है।
K0D4

5
map: समारोह एक पंक्ति में पूर्णांक पार्स करने के लिए इस्तेमाल किया जा सकताstr.split(',').map(parseInt)
जमात

1
यह सबसे कुशल समाधान नहीं है। क्रोम 49 के तहत मेरे प्रयोगों के अनुसार। JSON.parse ('[' + str + ']') इस समाधान से 40% तेज है।
याओ

33

हम्म स्प्लिट खतरनाक इमो है क्योंकि एक स्ट्रिंग में हमेशा एक कॉमा हो सकता है, निम्नलिखित का निरीक्षण करें:

var myArr = "a,b,c,d,e,f,g,','";
result = myArr.split(',');

तो आप इसे कैसे समझेंगे? और आप क्या परिणाम चाहते हैं? इसके साथ एक सरणी:

['a', 'b', 'c', 'd', 'e', 'f', 'g', '\'', '\''] or 
['a', 'b', 'c', 'd', 'e', 'f', 'g', ',']

यहां तक ​​कि अगर आप अल्पविराम से बचते हैं तो आपको एक समस्या होगी।

जल्दी से इसे एक साथ जोड़ा:

(function($) {
    $.extend({
        splitAttrString: function(theStr) {
            var attrs = [];

            var RefString = function(s) {
                this.value = s;
            };
            RefString.prototype.toString = function() {
                return this.value;
            };
            RefString.prototype.charAt = String.prototype.charAt;
            var data = new RefString(theStr);

            var getBlock = function(endChr, restString) {
                var block = '';
                var currChr = '';
                while ((currChr != endChr) && (restString.value !== '')) {
                    if (/'|"/.test(currChr)) {
                        block = $.trim(block) + getBlock(currChr, restString);
                    }
                    else if (/\{/.test(currChr)) {
                        block = $.trim(block) + getBlock('}', restString);
                    }
                    else if (/\[/.test(currChr)) {
                        block = $.trim(block) + getBlock(']', restString);
                    }
                    else {
                        block += currChr;
                    }
                    currChr = restString.charAt(0);
                    restString.value = restString.value.slice(1);
                }
                return $.trim(block);
            };

            do {
                var attr = getBlock(',', data);
                attrs.push(attr);
            }
            while (data.value !== '');
            return attrs;
        }
    });
})(jQuery);

इसे उपयोग / संपादित करने के लिए स्वतंत्र महसूस करें :)


1
यह संख्याओं के साथ भी बहुत अच्छा काम करता है और हमें नीचे दिए गए दूसरे उत्तर में बताए अनुसार उनके लिए एक अलग parseInt लूप नहीं चलाना है। यह वास्तविक गहरी सोच है। इसकी बहुत सराहना करते हैं और मुझे लगता है कि सभी के बीच सबसे अच्छा जवाब !!
अनमोल सराफ

28

विभाजन () विधि का उपयोग एक स्ट्रिंग को सब्सट्रिंग के एक सरणी में विभाजित करने के लिए किया जाता है, और नया सरणी लौटाता है।

var array = string.split(',');

परिणाम क्या होगा? उदाहरण के लिए, यदि मेरे पास var a = "hello, world, baby" है; और var array = a.split (','); -> मेरी सरणी इस तरह दिखेगी: सरणी = ["हैलो", "दुनिया", "बेबी"]; ??
निर्णायक डेवलपर

1
हां यह सही है। परिणामी सरणी आपके उल्लेख के अनुसार ही होगी।
जक्कवील्ड

आपका उत्तर मेरे लिए काम कर रहा है लेकिन, मेरा नया सरणी पुराने को प्रतिस्थापित नहीं कर रहा है। क्या आप मेरी मदद कर सकते हैं? var sampleTags = ['vinita@itsabacus.com']; console.log(sampleTags); $("#order_id").on("change", function() { var order_id = document.getElementById('order_id').value; $.ajax({url: "model/getUserMailIds.php",data:{order_id:order_id},type:'POST', success: function(result){ alert(result); var sampleTags = result.split(',');; console.log(sampleTags); }}); });
विनीता पवार

16

ध्यान दें कि निम्नलिखित:

 var a = "";
var x = new Array();
x = a.split(",");
alert(x.length);

1 को सचेत करेगा


14

इस फ़ंक्शन में अपना अल्पविराम सेपरेटेड स्ट्रिंग पास करें और यह एक सरणी लौटाएगा, और यदि अल्पविराम से अलग नहीं किया गया स्ट्रिंग पाया जाता है तो वापस आ जाएगा।

 function splitTheString(CommaSepStr) {
       var ResultArray = null; 

// Check if the string is null or so.
        if (CommaSepStr!= null) {


             var SplitChars = ',';
   // Check if the string has comma of not will go to else
                if (CommaSepStr.indexOf(SplitChars) >= 0) {
                    ResultArray = CommaSepStr.split(SplitChars);

                }
             else { 
  // string has only one value, can also check the length of the string or time and cross-check too. 
                    ResultArray = [CommaSepStr]; 
              }
        }
       return ResultArray ;
    }

3
केवल कोड का एक ब्लॉक पोस्ट करने के बजाय, कृपया बताएं कि यह कोड समस्या का हल क्यों निकालता है। स्पष्टीकरण के बिना, यह एक उत्तर नहीं है।
मार्टिन पीटर्स

1
यह सबसे सही समाधान है यदि आप सुनिश्चित नहीं हैं कि स्ट्रिंग में आपका विभाजन मूल्य होगा। यह फ़ंक्शन स्प्लिट विधि को बाहर रखने से रोक देगा यदि स्ट्रिंग में अल्पविराम नहीं है (उपरोक्त उदाहरण दिया गया है)।
कॉरीडोरिंग

1
नोट: फ़ंक्शंस जो एक कैपिटल लेटर से शुरू होते हैं, ज्यादातर समय, डिज़ाइन किए जाते हैं। उन कार्यों पर निचले केस पत्रों का उपयोग करने के लिए सबसे अच्छा है जिन्हें डिज़ाइन नहीं किया गया है।
Jsterman

यह मेरे लिए विफल रहा जब मेरे पास केवल एक मूल्य था जिसमें कोई अल्पविराम नहीं था। else { ResultArray = [CommaSepStr]; }दूसरे के बाद जोड़ा गयाif
थॉमस ब्यू

धन्यवाद जोड़ दिया है। यह।
बीजे पटेल

8

वापसी समारोह

var array = (new Function("return [" + str+ "];")());

इसकी स्ट्रिंग और आपत्तियां स्वीकार करते हैं

var string = "0,1";

var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';

var stringArray = (new Function("return [" + string+ "];")());

var objectStringArray = (new Function("return [" + objectstring+ "];")());

JSFiddle https://jsfiddle.net/7ne9L4Lj/1/


3
टेक्स्ट स्ट्रिंग्स में त्रुटियां हैं - सिंटेक्सऑरर: अप्रत्याशित पहचानकर्ता संख्या के तार ठीक हैं। जैसे। var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); परिणाम है:
SyntaxError

7

मुझे पता है कि इस सवाल का जवाब काफी समय से दिया जा रहा है, लेकिन मुझे लगा कि मेरा योगदान इस विषय पर शोध करने वाले अन्य लोगों के लिए फायदेमंद होगा ...

यहां एक फ़ंक्शन है जो स्ट्रिंग को एक सरणी में बदल देगा, भले ही सूची में केवल एक आइटम हो (कोई विभाजक वर्ण नहीं):

function listToAray(fullString, separator) {
  var fullArray = [];

  if (fullString !== undefined) {
    if (fullString.indexOf(separator) == -1) {
      fullAray.push(fullString);
    } else {
      fullArray = fullString.split(separator);
    }
  }

  return fullArray;
}

इसे इस तरह उपयोग करें:

var myString = 'alpha,bravo,charlie,delta';
var myArray = listToArray(myString, ',');
myArray[2]; // charlie

var yourString = 'echo';
var yourArray = listToArray(yourString, ',');
yourArray[0]; // echo

मैंने यह फ़ंक्शन बनाया क्योंकि splitस्ट्रिंग में कोई विभाजक वर्ण नहीं होने पर एक त्रुटि होती है (केवल एक आइटम)


3
यदि विभाजक नहीं मिला है तो कोई त्रुटि नहीं है: 'echo'.split(',')रिटर्न ['echo'], और ''.split(',') रिटर्न ['']। आप होगा कोई त्रुटि मिलती है अगर तुम फोन x.split(',')जब x(सहित जब एक स्ट्रिंग नहीं है xहै अपरिभाषित या अशक्त ,) नहीं है क्योंकि वहाँ splitसमारोह अन्य प्रकार के लिए उपलब्ध है।
जोएल ली

आह, मैं देख रहा हूँ कि मैं वास्तव में splitएक अपरिभाषित वस्तु के लिए उपयोग करने की कोशिश कर रहा था जब मैंने अपनी सूची को लिखा था। यह इंगित करने के लिए धन्यवाद ...
Kabb5

6

मेरे पास एक समान मुद्दा था, लेकिन अधिक सीवी के रूप में मुझे एक एवीवी को सरणियों के एक सरणी में बदलने की आवश्यकता थी (प्रत्येक पंक्ति एक सरणी तत्व है जिसके अंदर अल्पविराम द्वारा विभाजित मदों की एक सरणी है)।

सबसे आसान समाधान (और अधिक सुरक्षित मैं शर्त लगाता हूं) PapaParse ( http://papaparse.com/ ) का उपयोग करना था, जिसमें "नो-हेडर" विकल्प होता है, जो csv को सरणियों की एक सरणी में बदल देता है, प्लस, यह स्वचालित रूप से "का पता लगाता है" , "मेरे परिसीमन के रूप में।

इसके अलावा, यह बोवर में पंजीकृत है, इसलिए मुझे केवल यह करना था:

bower install papa-parse --save

और फिर इसे निम्नानुसार मेरे कोड में उपयोग करें:

var arrayOfArrays = Papa.parse(csvStringWithEnters), {header:false}).data;

मुझे बहुत अच्छा लगा।


5
let str = "January,February,March,April,May,June,July,August,September,October,November,December"

let arr = str.split(',');

इसका परिणाम होगा:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

और यदि आप निम्नलिखित को बदलना चाहते हैं:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

इस:

"January,February,March,April,May,June,July,August,September,October,November,December";

उपयोग:

str = arr.join(',')

3

उसके लिए अच्छा समाधान है

let obj = ['A','B','C']

obj.map((c) => { return c. }).join(', ')


1

आप निम्नलिखित स्निपेट आज़मा सकते हैं

 var str = "How,are,you,doing,today?";
    var res = str.split(",");
    console.log("My Result:",res)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.