জাভাস্ক্রিপ্ট অ্যারে কমা-বিচ্ছিন্ন তালিকায় রূপান্তর করার সহজ উপায়?


403

আমার কাছে জাভাস্ক্রিপ্টে স্ট্রিমগুলির এক-মাত্রিক অ্যারে রয়েছে যা আমি কমা-বিচ্ছিন্ন তালিকায় পরিণত করতে চাই। এটিকে কমা-বিচ্ছিন্ন তালিকায় পরিণত করার জন্য বাগানের বিভিন্ন জাভাস্ক্রিপ্ট (বা jQuery) এর কোনও সহজ উপায় আছে কি? (আমি জানি অ্যারে দিয়ে কীভাবে পুনরাবৃত্তি করা যায় এবং যদি একমাত্র উপায় হয় তবে কনটেন্টেশন দিয়ে স্ট্রিংটি নিজেকে তৈরি করতে পারি))


2
টু স্ট্রিং () : আপনি যদি সর্বাধিক সহজ উপায়টি সন্ধান করেন তবে টুস্ট্রিং () এর মতো ব্যবহার করা আরও ভাল : var arr = ["Zero", "One", "Two"]; console.log(arr.toString());যা Zero,One,Two আরও
মোহাম্মদ মুসাভি

উত্তর:


784

Array.prototype.join () পদ্ধতি:

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

document.write(arr.join(", "));


2
@ মার্ক: যথেষ্ট সত্য তবে আইডিগুলির তালিকাটি আমার একচেটিয়া করা দরকার, কমা বা অন্যান্য বিশেষ অক্ষরের কোনও সম্ভাবনা নেই
davewilliams459

11
@ ডেভুইলিয়ামস 459: তবে আপনি ওপি নন? ওপ বলেছিলেন "স্ট্রিংগুলির এক-মাত্রিক অ্যারে"। স্ট্রিংস। আইডি নয়। এগুলি বোঝায় যে তারা যে কোনও কিছু হতে পারে। যার অর্থ তারা অন্যান্য কমা থাকতে পারে।
এমপেইন

22
@ মার্ক: জিজ্ঞাসা করা প্রশ্নের উত্তর সঠিক। অন্য কোনও প্রয়োজনীয়তা ব্যক্তিগতভাবে নিজের জন্য কাজ করার জন্য ছেড়ে যায়। ওপি একটি উদ্ধৃত সিএসভি-ধরণের ফর্ম্যাট নয়, কমা-বিযুক্ত তালিকা চেয়েছিল।
ওয়েইন

10
@ ওয়াইন: আমি এখনও মনে করি একটি সতর্কবার্তা ঠিক মতো হয়েছে :) মানুষ সবসময় এই বিষয়গুলি চিন্তা করে না এবং পরে তারা নিজেরাই পায়ে পরে shoot
এমপিনে

13
@ মার্ক - আপনার মন্তব্যটি পুরোপুরি বৈধ (যেমন অন্যরা একটি উত্সাহের সাথে নির্দেশ করেছেন) তবে উদাহরণস্বরূপ বিকল্প বিকল্পটি দেওয়ার জন্য আরও সহায়ক হতে পারে?
ক্রিস

94

আসলে, toString()বাস্তবায়নটি ডিফল্টরূপে কমাতে যোগ দেয়:

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

আমি জানি না এটি জেএস স্পেক দ্বারা বাধ্যতামূলক কিনা তবে এটিই what সবচেয়ে বেশিরভাগই ব্রাউজারগুলি করছে বলে মনে হচ্ছে।


1
আরও ছোট (তবে কম পরিষ্কার)arr + ''
ওরিওল

অ্যারে.টোস্ট্রিং কমা পরে স্থান ছাড়াই কাজ করে। অ্যারে.জইনের সাথে আপনি নমনীয়।
jMike

3
এর সম্পাদনা toString()এবং join(",")এপ্রিল 2018 প্রায় সমতুল্য
ম্যাটএমসিএকটাইনাইট

29

বা (আরও দক্ষতার সাথে):

var arr = নতুন অ্যারে (3);
arr [0] = "শূন্য";
arr [1] = "এক";
arr [2] = "দুই";

(-Arr) document.write; // এই প্রসঙ্গে ডকুমেন্ট.আরাইট (arr.toString ()) হিসাবে একই

একটি অ্যারের টোস্ট্রিং পদ্ধতি যখন ডাকা হয় তখন ঠিক আপনার যা প্রয়োজন তা - কমা-বিচ্ছিন্ন তালিকা।


2
বেশিরভাগ ক্ষেত্রে টোস্ট্রিং আসলে অ্যারে যোগ দেওয়ার চেয়ে ধীর হয়। এখানে দেখুন: jsperf.com/tostring-join
সমীর

13

এখানে এমন একটি বাস্তবায়ন যা দ্বি-মাত্রিক অ্যারে বা কলামগুলির একটি অ্যারেকে যথাযথভাবে পালানো সিএসভি স্ট্রিংয়ে রূপান্তর করে। ফাংশনগুলি বৈধ স্ট্রিং / নম্বর ইনপুট বা কলামের গণনাগুলির জন্য পরীক্ষা করে না (আপনার অ্যারে শুরু হওয়ার সাথে বৈধ কিনা তা নিশ্চিত করুন)। কোষগুলিতে কমা এবং উদ্ধৃতি থাকতে পারে!

সিএসভি স্ট্রিংগুলি ডিকোড করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে

সিএসভি স্ট্রিংগুলি এনকোডিংয়ের জন্য আমার স্ক্রিপ্ট এখানে রয়েছে :

// 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");
    };
}

11

আমি মনে করি এটি করা উচিত:

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(',');

বেহালা

মূলত এটিগুলি যা করে তা স্ট্রিংয়ে কমা বা উদ্ধৃতি রয়েছে কিনা তা পরীক্ষা করা হয়। যদি এটি হয়, তবে এটি সমস্ত উদ্ধৃতি দ্বিগুণ করে এবং প্রান্তে কোট রাখে। তারপরে এটি কমা দিয়ে প্রতিটি অংশে যোগ দেয়।


2
Noooooooooo! ডাউনভোট করতে প্রলুব্ধ। যদি উদ্ধৃতিগুলি ব্যাকস্ল্যাশগুলি দিয়ে পালানো উচিত ?! তাদের পরিবর্তনশীল হওয়া দরকার। ;)
জোশুয়া বার্নস

1
@ জোশুয়া বার্নস উইকিপিডিয়া বলেছে যে ডাবল কোটগুলি অন্য একটি উদ্ধৃতি দিয়ে পালাতে হবে, তবে কোনও আনুষ্ঠানিক মান নেই। আপনার সিএসভি পাঠকের যদি অন্যরকম কিছু প্রয়োজন হয় তবে নির্দ্বিধায় এবং / অথবা
ডাউনওয়েট নির্দ্বিধায়

5
প্রকৃতপক্ষে একটি আরএফসি, সরঞ্জাম. ietf.org/rfc/rfc4180.txt আছে এবং এটি সঠিক ডাবল উদ্ধৃতিগুলি ডাবল উদ্ধৃতি দিয়ে পালাতে হবে।
স্টিভ বুজনস

2
@ স্টেভ বুজোনাস, আপনি কেবলমাত্র আপনার আরএফসির সাহায্যে লোকটিকে বন্ধন করেছেন।
ডেভিনিস্ট

9

আপনি যদি শেষ দুটি আইটেমের মধ্যে "এবং" এর পরিবর্তে "" ব্যবহার করতে চান তবে আপনি এটি করতে পারেন:

function arrayToList(array){
  return array
    .join(", ")
    .replace(/, ((?:.(?!, ))+)$/, ' and $1');
}

9

অ্যারেকে কমা দ্বারা পৃথক করা তালিকায় রূপান্তর করার জন্য অনেকগুলি পদ্ধতি রয়েছে

1. অ্যারে # জয়েন ব্যবহার করে

এমডিএন থেকে

জোড় () পদ্ধতিটি অ্যারের সমস্ত উপাদানগুলিতে (বা একটি অ্যারের মতো অবজেক্ট) একটি স্ট্রিংয়ে যোগ দেয়।

কোড

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

টুকিটাকি

2. অ্যারে # টু স্ট্রিং ব্যবহার করে

এমডিএন থেকে

টসস্ট্রিং () পদ্ধতিটি নির্দিষ্ট করা অ্যারে এবং এর উপাদানগুলি উপস্থাপন করে একটি স্ট্রিং প্রদান করে।

কোড

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

টুকিটাকি

৩. অ্যারের আগে [] + বা অ্যারের পরে + []] যোগ করুন

[] বা [] একটি স্ট্রিং সেটিকে রূপান্তর করবে

প্রমাণ

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

সত্য আউটপুট হবে

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

টুকিটাকি

এছাড়াও

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



3

আমি সাধারণত নিজেকে এমন কিছু প্রয়োজনের সন্ধান করি যা মানটি nullবা যদি undefinedইত্যাদি হয় তবে মানটি এড়িয়ে যায় etc.

সুতরাং এখানে সমাধান যা আমার পক্ষে কাজ করে:

// 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'

', apple'আমার অ্যারেটি আমার দ্বিতীয় উদাহরণের মতো দেখায় এখানে বেশিরভাগ সমাধান ফিরে আসবে। সে কারণেই আমি এই সমাধানটি পছন্দ করি।


2

Https://jsfiddle.net/rwone/qJUh2/ এ সমাধানটি আমি পছন্দ করেছি কারণ এটি কমাগুলির পরে স্পেস যুক্ত করে:

array = ["test","test2","test3"]
array = array.toString();
array = array.replace(/,/g, ", ");
alert(array);

বা মন্তব্যগুলিতে @ স্ট্যাক ওভারফ্লাওয়ার পরামর্শ অনুসারে:

array.join(', ');

1
একটি কলে: arr.join(', ')যা আসলে দ্রুত (@ সমীরের মতামত অনুসারে), এবং আরও নিরাপদ (ফলাফলযুক্ত স্ট্রিংয়ের রেজিএক্সপেক্টের মতো অ্যারের মানগুলির মধ্যে কমাগুলি নিয়ে বিড়বিড় হয় না)। ;)
স্টক ওভারফ্লা

পছন্দ করুন একই জিনিসটি আরও নিরাপদ এবং দ্রুত করার জন্য কম কোড। ধন্যবাদ.
জাইম মন্টোয়া

2

পাপা পার্সে মান এবং অন্যান্য প্রান্তের ক্ষেত্রে কমা পরিচালনা করে।

( বেবি পার্স নোডের জন্য হ্রাস করা হয়েছে - আপনি এখন ব্রাউজারে এবং নোডে পাপা পার্স ব্যবহার করতে পারেন))

যেমন। (নোড)

const csvParser = require('papaparse'); // previously you might have used babyparse
var arr = [1,null,"a,b"] ;
var csv = csvParser.unparse([arr]) ;
console.log(csv) ;

1 ,, "A, B"


1

প্রাথমিক কোড গ্রহণ:

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

আপনি কি এটি "এবং" দিয়ে শেষ করতে চান?

এই পরিস্থিতির জন্য, আমি একটি এনপিএম মডিউল তৈরি করেছি।

এয়ারফোর্ড চেষ্টা করুন :


ব্যবহার

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 install --save arrford


আরও পড়ুন

https://github.com/dawsonbotsford/arrford


এটি নিজে চেষ্টা করো

টনিক লিঙ্ক


1

ক্রোম 72 হিসাবে, ইন্টেল.লিস্টফোর্ম্যাট ব্যবহার করা সম্ভব :

const vehicles = ['Motorcycle', 'Bus', 'Car'];

const formatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });
console.log(formatter.format(vehicles));
// expected output: "Motorcycle, Bus, and Car"

const formatter2 = new Intl.ListFormat('de', { style: 'short', type: 'disjunction' });
console.log(formatter2.format(vehicles));
// expected output: "Motorcycle, Bus oder Car"

const formatter3 = new Intl.ListFormat('en', { style: 'narrow', type: 'unit' });
console.log(formatter3.format(vehicles));
// expected output: "Motorcycle Bus Car"

দয়া করে মনে রাখবেন যে এই উপায়টি তার আগের পর্যায়ে রয়েছে, সুতরাং এই উত্তর পোস্ট করার তারিখ অনুসারে, Chrome এবং অন্যান্য ব্রাউজারগুলির পুরানো সংস্করণগুলির সাথে অসঙ্গতি আশা করে।


0
var arr = ["Pro1", "Pro2", "Pro3"];
console.log(arr.join());// Pro1,Pro2,Pro3
console.log(arr.join(', '));// Pro1, Pro2, Pro3

0
var array = ["Zero", "One", "Two"];
var s = array + [];
console.log(s); // => Zero,One,Two

1
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না। আপনার কোডটি ব্যাখ্যামূলক মন্তব্যে ভিড় না করার চেষ্টা করুন, এটি কোড এবং ব্যাখ্যা উভয়ের পাঠযোগ্যতা হ্রাস করে!
কেয়েস

0

এই সমাধানটি মানগুলিও সরিয়ে দেয় যেমন " ":

const result = ['', null, 'foo', '  ', undefined, 'bar'].filter(el => {
  return Boolean(el) && el.trim() !== '';
}).join(', ');

console.log(result); // => foo, bar
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.