जावास्क्रिप्ट सरणी को अल्पविराम से अलग सूची में बदलने का आसान तरीका?

मेरे पास जावास्क्रिप्ट में तारों की एक-आयामी सरणी है जो मैं अल्पविराम से अलग सूची में बदलना चाहता हूं। क्या कॉर्न से अलग सूची में बदलने के लिए बगीचे-विविध जावास्क्रिप्ट (या jQuery) में कोई आसान तरीका है? (मुझे पता है कि सरणी के माध्यम से फिर से कैसे चलना है और अगर यह एकमात्र तरीका है तो concatenation द्वारा स्ट्रिंग का निर्माण करें।)

319
toString() : यदि आप सबसे आसान तरीके की तलाश में हैं तो toString() का उपयोग करना बेहतर है: var arr = ["शून्य", "एक" , "दो"]; console.log (arr.toString ()); जो शून्य, एक, दो और पढ़ें
जोड़ा लेखक Mohammad lm71, स्रोत

14 उत्तर

Array.prototype.join() विधि :

<div class="snippet" data-lang="js" data-hide="false" data-console="false" data-babel="false"> <div class="snippet-code">

var arr = ["Zero", "One", "Two"];

document.write(arr.join(", "));
</div> </div>
603
जोड़ा
@ डेवविल्लियम्स 45 9: लेकिन आप ओपी नहीं हैं? ओप ने कहा "स्ट्रिंग्स का एक आयामी सरणी"। स्ट्रिंग्स। आईडी नहीं इसका तात्पर्य है कि वे कुछ भी हो सकते हैं। जिसका अर्थ है कि उनमें अन्य कॉमा शामिल हो सकते हैं।
जोड़ा लेखक mpen, स्रोत
@bostIT जब तक आप निश्चित हैं, यह कभी नहीं दिखाई देगा, हां, यह एक आसान समाधान है। मुझे लगता है कि कम से कम जवाब में इसका उल्लेख किया जाना चाहिए।
जोड़ा लेखक mpen, स्रोत
@ क्रिस: मुझे नहीं लगता कि मैं किसी अन्य समाधान में त्रुटियों को इंगित करने के लिए वैकल्पिक विकल्प प्रदान करने के लिए बाध्य हूं। फिर भी, मेरे पास है।
जोड़ा लेखक mpen, स्रोत
@Wayne: मुझे अभी भी लगता है कि एक चेतावनी क्रम में है :) लोग हमेशा इन चीजों को नहीं सोचते हैं, और फिर वे बाद में पैर में खुद को गोली मारते हैं।
जोड़ा लेखक mpen, स्रोत
@ मार्क, आप हमेशा किसी चीज के साथ तारों को सीमित कर सकते हैं जो शायद उनके डेटा में कभी नहीं दिखाई देगी, जैसे ";;;"।
जोड़ा लेखक devinbost, स्रोत
@ मार्क - आपकी टिप्पणी पूरी तरह से मान्य है (जैसा कि अन्य ने एक उपरोक्त के साथ संकेत दिया है) लेकिन वास्तव में उदाहरण कोड के साथ वैकल्पिक उत्तर प्रदान करने के लिए और अधिक उपयोगी हो सकता है?
जोड़ा लेखक Chris, स्रोत
@ मार्क: पूछे गए प्रश्न के लिए उत्तर सही है। खुद के लिए काम करने के लिए व्यक्ति को कोई अन्य आवश्यकताएं छोड़ दी जाती हैं। ओपी ने अल्पविराम से अलग सूची के लिए कहा, उद्धृत सीएसवी-प्रकार प्रारूप नहीं।
जोड़ा लेखक Wayne, स्रोत
@ मार्क: काफी सच है लेकिन मुझे आईडी की सूची, कॉमा या अन्य विशेष वर्णों की कोई संभावना नहीं है
जोड़ा लेखक davewilliams459, स्रोत

असल में, toString() कार्यान्वयन डिफ़ॉल्ट रूप से अल्पविराम से जुड़ता है:

var arr = [ 42, 55 ];
var str1 = arr.toString();//Gives you "42,55"
var str2 = String(arr);//Ditto

मुझे नहीं पता कि यह जेएस स्पेक द्वारा अनिवार्य है या नहीं, लेकिन यह अधिकांश है जो बहुत सारे ब्राउज़र कर रहे हैं।

80
जोड़ा
छोटा (लेकिन कम स्पष्ट) arr + '' भी है
जोड़ा लेखक Oriol, स्रोत
toString() और join (",") का प्रदर्शन मोटे तौर पर अप्रैल 2018 के बराबर है
जोड़ा लेखक MattMcKnight, स्रोत
सरणी शामिल होना तेज है jsperf.com/tostring-join
जोड़ा लेखक Sameer, स्रोत
array.toString अल्पविराम के बाद अंतरिक्ष के बिना नौकरी करता है। Array.join के साथ आप लचीला हैं।
जोड़ा लेखक jMike, स्रोत

या (अधिक कुशलता से):

var arr = new Array(3);
arr[0] = "Zero";
arr[1] = "One";
arr[2] = "Two";

document.write(arr);//same as document.write(arr.toString()) in this context

एक सरणी की ToString विधि जिसे आपको वही कहा जाता है जो आपको चाहिए - अल्पविराम से अलग सूची।

28
जोड़ा
ज्यादातर मामलों में, ToString सरणी में शामिल होने से वास्तव में धीमी है। यहां देखो: jsperf.com/tostring-join
जोड़ा लेखक Sameer, स्रोत

यहां एक कार्यान्वयन है जो एक द्वि-आयामी सरणी या स्तंभों की एक सरणी को ठीक से बच निकले CSV स्ट्रिंग में परिवर्तित करता है। फ़ंक्शन मान्य स्ट्रिंग/संख्या इनपुट या कॉलम गणनाओं की जांच नहीं करते हैं (सुनिश्चित करें कि आपकी सरणी प्रारंभ करने के लिए मान्य है)। कोशिकाओं में अल्पविराम और उद्धरण शामिल हो सकते हैं!

यहां एक सीएसवी तारों को डीकोड करने के लिए स्क्रिप्ट है।

यहां मेरे एन्कोडिंग CSV स्ट्रिंग्स के लिए स्क्रिप्ट है:

// Example
var csv = new csvWriter();
csv.del = '\t';
csv.enc = "'";

var nullVar;
var testStr = "The comma (,) pipe (|) single quote (') double quote (\") and tab (\t) are commonly used to tabulate data in plain-text formats.";
var testArr = [
    false,
    0,
    nullVar,
   //undefinedVar,
    '',
    {key:'value'},
];

console.log(csv.escapeCol(testStr));
console.log(csv.arrayToRow(testArr));
console.log(csv.arrayToCSV([testArr, testArr, testArr]));

/**
 * Class for creating csv strings
 * Handles multiple data types
 * Objects are cast to Strings
 **/

function csvWriter(del, enc) {
    this.del = del || ',';//CSV Delimiter
    this.enc = enc || '"';//CSV Enclosure

   //Convert Object to CSV column
    this.escapeCol = function (col) {
        if(isNaN(col)) {
           //is not boolean or numeric
            if (!col) {
               //is null or undefined
                col = '';
            } else {
               //is string or object
                col = String(col);
                if (col.length > 0) {
                   //use regex to test for del, enc, \r or \n
                   //if(new RegExp( '[' + this.del + this.enc + '\r\n]' ).test(col)) {

                   //escape inline enclosure
                    col = col.split( this.enc ).join( this.enc + this.enc );

                   //wrap with enclosure
                    col = this.enc + col + this.enc;
                }
            }
        }
        return col;
    };

   //Convert an Array of columns into an escaped CSV row
    this.arrayToRow = function (arr) {
        var arr2 = arr.slice(0);

        var i, ii = arr2.length;
        for(i = 0; i < ii; i++) {
            arr2[i] = this.escapeCol(arr2[i]);
        }
        return arr2.join(this.del);
    };

   //Convert a two-dimensional Array into an escaped multi-row CSV 
    this.arrayToCSV = function (arr) {
        var arr2 = arr.slice(0);

        var i, ii = arr2.length;
        for(i = 0; i < ii; i++) {
            arr2[i] = this.arrayToRow(arr2[i]);
        }
        return arr2.join("\r\n");
    };
}
13
जोड़ा

मुझे लगता है कि यह करना चाहिए:

var arr = ['contains,comma', 3.14, 'contains"quote', "more'quotes"]
var item, i;
var line = [];

for (i = 0; i < arr.length; ++i) {
    item = arr[i];
    if (item.indexOf && (item.indexOf(',') !== -1 || item.indexOf('"') !== -1)) {
        item = '"' + item.replace(/"/g, '""') + '"';
    }
    line.push(item);
}

document.getElementById('out').innerHTML = line.join(',');

बेवकूफ

असल में यह सब जांचता है कि स्ट्रिंग में अल्पविराम या उद्धरण शामिल है या नहीं। यदि ऐसा होता है, तो यह सभी उद्धरणों को दोगुना करता है, और अंत में उद्धरण देता है। फिर यह प्रत्येक भाग को अल्पविराम से जोड़ता है।

10
जोड़ा
@ जोशुआबर्न विकिपीडिया कहता है कि डबल कोट्स को दूसरे उद्धरण से बच जाना चाहिए, लेकिन वहां है कोई औपचारिक मानक नहीं। यदि आपके सीएसवी पाठक को कुछ अलग करने की आवश्यकता है, तो संशोधित करने और/या डाउनवोट करने के लिए स्वतंत्र महसूस करें;)
जोड़ा लेखक mpen, स्रोत
Noooooooooo! डाउनवोट करने के लिए प्रेरित। क्या होगा अगर उद्धरण बैकस्लाश से बच जाए ?! उन्हें चर होना चाहिए। ;)
जोड़ा लेखक Joshua Burns, स्रोत
वास्तव में एक आरएफसी है, tools.ietf.org/rfc/rfc4180.txt , और यह सही डबल कोट्स डबल कोट्स से बच जाना चाहिए।
जोड़ा लेखक Steve Buzonas, स्रोत
@ स्टेव बुज़ोनस, आपने बस उस आदमी को अपने आरएफसी के साथ पंसद किया है।
जोड़ा लेखक devinbost, स्रोत

अंतर्निहित Array.toString विधि का उपयोग करें

var arr = ['one', 'two', 'three'];
arr.toString(); //'one,two,three'

Array.toString() पर MDN

6
जोड़ा

मुझे आमतौर पर मुझे कुछ ऐसी चीज की आवश्यकता होती है जो मान को छोड़ देता है यदि वह मान null या अपरिभाषित इत्यादि है।

तो यहां समाधान है जो मेरे लिए काम करता है:

// Example 1
const arr1 = ['apple', null, 'banana', '', undefined, 'pear'];
const commaSeparated1 = arr1.filter(item => item).join(', ');
console.log(commaSeparated1);//'apple, banana, pear'

// Example 2
const arr2 = [null, 'apple'];
const commaSeparated2 = arr2.filter(item => item).join(', ');
console.log(commaSeparated2);//'apple'

यहां पर अधिकांश समाधान ', सेब' वापस आ जाएंगे यदि मेरी सरणी मेरे दूसरे उदाहरण में एक जैसा दिखाई देगी। यही कारण है कि मैं इस समाधान को पसंद करता हूं।

3
जोड़ा

यदि आपको पिछले दो आइटमों के बीच "और" का उपयोग करने की आवश्यकता है, तो आप यह कर सकते हैं:

function arrayToList(array){
  return array
    .join(", ")
    .replace(/, ((?:.(?!, ))+)$/, ' and $1');
}
3
जोड़ा

एक सरणी को अल्पविराम से अलग सूची में बदलने के लिए कई विधियां हैं

1. सरणी # शामिल का उपयोग करना

From MDN

जुड़ें() विधि किसी सरणी (या सरणी जैसी वस्तु) के सभी तत्वों को स्ट्रिंग में जोड़ती है।

कोड

var arr = ["this","is","a","comma","separated","list"];
arr = arr.join(",");

टुकड़ा

<div class="टुकड़ा" data-lang="js" data-hide="true" data-console="true" data-babel="false"> <div class="टुकड़ा-code टुकड़ा-currently-hidden">

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr.join(",");
console.log(arr);
</div> </div>

2. सरणी # toString का उपयोग करना

From MDN

ToString() विधि निर्दिष्ट सरणी और उसके तत्वों का प्रतिनिधित्व करने वाली स्ट्रिंग देता है।

कोड

var arr = ["this","is","a","comma","separated","list"];
arr = arr.toString();

टुकड़ा

<div class="टुकड़ा" data-lang="js" data-hide="true" data-console="true" data-babel="false"> <div class="टुकड़ा-code टुकड़ा-currently-hidden">

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr.toString();
console.log(arr);
</div> </div>

3. किसी सरणी के बाद सरणी या + [] से पहले [] + जोड़ें

[] + या + [] इसे एक स्ट्रिंग में परिवर्तित कर देगा

प्रमाण

([]+[] === [].toString())

will output true

<div class="टुकड़ा" data-lang="js" data-hide="true" data-console="true" data-babel="false"> <div class="टुकड़ा-code टुकड़ा-currently-hidden">

console.log([]+[] === [].toString());
</div> </div>
var arr = ["this","is","a","comma","separated","list"];
arr = []+arr;

टुकड़ा

<div class="टुकड़ा" data-lang="js" data-hide="true" data-console="true" data-babel="false"> <div class="टुकड़ा-code टुकड़ा-currently-hidden">

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = []+arr;
console.log(arr);
</div> </div>

भी

var arr = ["this","is","a","comma","separated","list"];
arr = arr+[];

<div class="टुकड़ा" data-lang="js" data-hide="true" data-console="true" data-babel="false"> <div class="टुकड़ा-code टुकड़ा-currently-hidden">

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr + [];
console.log(arr);
</div> </div>
2
जोड़ा
var array = ["Zero", "One", "Two"];
var s = array + [];
console.log(s);//=> Zero,One,Two
1
जोड़ा
हालांकि यह कोड स्निपेट प्रश्न हल कर सकता है, एक स्पष्टीकरण सहित वास्तव में गुणवत्ता में सुधार करने में मदद करता है आपकी पोस्ट का याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। स्पष्टीकरण टिप्पणियों के साथ अपने कोड को भीड़ न करने का प्रयास करें, इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है!
जोड़ा लेखक kayess, स्रोत

प्रारंभिक कोड लेना:

var arr = new Array(3);
arr[0] = "Zero";
arr[1] = "One";
arr[2] = "Two";

जॉइन फ़ंक्शन का उपयोग करने का प्रारंभिक उत्तर आदर्श है। विचार करने की एक बात स्ट्रिंग का अंतिम उपयोग होगा।

कुछ अंत पाठ प्रदर्शन में उपयोग करने के लिए:

arr.join(",")
=> "Zero,One,Two"

एक (कुछ हद तक) में कई मानों को पारित करने के लिए यूआरएल में उपयोग करने के लिए रीस्टफुल तरीके:

arr.join("|")
=> "Zero|One|Two"

var url = 'http://www.yoursitehere.com/do/something/to/' + arr.join("|");
=> "http://www.yoursitehere.com/do/something/to/Zero|One|Two"

बेशक, यह सब अंतिम उपयोग पर निर्भर करता है। बस डेटा स्रोत रखें और दिमाग में उपयोग करें और सभी दुनिया के साथ सही होंगे।

1
जोड़ा

क्या आप इसे "और" के साथ समाप्त करना चाहते हैं?

इस स्थिति के लिए, मैंने एक एनपीएम मॉड्यूल बनाया।

arrford आज़माएं:


प्रयोग

const arrford = require('arrford');

arrford(['run', 'climb', 'jump!']);
//=> 'run, climb, and jump!'

arrford(['run', 'climb', 'jump!'], false);
//=> 'run, climb and jump!'

arrford(['run', 'climb!']);
//=> 'run and climb!'

arrford(['run!']);
//=> 'run!'


इंस्टॉल करें

npm इंस्टॉल करें --save arrford


और पढो

https://github.com/dawsonbotsford/arrford


यह अपने आप का प्रयास करें

टॉनिक लिंक

1
जोड़ा
var arr = ["Pro1", "Pro2", "Pro3"];
console.log(arr.join());// Pro1,Pro2,Pro3
console.log(arr.join(', '));// Pro1, Pro2, Pro3
0
जोड़ा

Papa Parse (browser based) handles commas in values and other edge cases. Use Baby Parse for Node.

उदाहरण के लिए। (नोड)

const csvParser = require('babyparse');
var arr = [1,null,"a,b"] ;
var csv = csvParser.unparse([arr]) ;
console.log(csv) ;

1 , "ए, बी"

0
जोड़ा