जावास्क्रिप्ट विस्फोट के समतुल्य जावास्क्रिप्ट ()


353

मेरे पास यह स्ट्रिंग है:

0000000020C90037: अस्थायी: डेटा

मुझे इस स्ट्रिंग की आवश्यकता है:

अस्थायी: डेटा।

PHP के साथ मैं यह करूँगा:

$str = '0000000020C90037:TEMP:data';
$arr = explode(':', $str);
$var = $arr[1].':'.$arr[2];

मैं explodePHP में प्रभावी ढंग से स्ट्रिंग कैसे कर सकता हूं जिस तरह से यह PHP में काम करता है?

जवाबों:


607

यह आपके PHP कोड से एक सीधा रूपांतरण है:

//Loading the variable
var mystr = '0000000020C90037:TEMP:data';

//Splitting it with : as the separator
var myarr = mystr.split(":");

//Then read the values from the array where 0 is the first
//Since we skipped the first element in the array, we start at 1
var myvar = myarr[1] + ":" + myarr[2];

// Show the resulting value
console.log(myvar);
// 'TEMP:data'

75
यह ध्यान दिया जाना चाहिए कि यह सरणी [0] पर शुरू होती है
हेर

52
@ हेर कालेन ... यह समझा जाता है ... लेकिन ओपी सरणी में अंतिम दो आइटम चाहते थे।
जॉन हार्टसॉक

4
+1: यह सही है; यहाँ MDN से एक लिंक है: developer.mozilla.org/en/JavaScript/Reference/Global_Object// । और "विपरीत" दिशा, इसलिए PHP निहित () समतुल्य है myArray.join (':'): developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
SkererPeter

12
ध्यान दें : split(delimiter,limit)'s सीमा पैरामीटर' s 's सीमा पैरामीटर के समान नहीं है explode($delimiter,$string,$limit)। उदाहरण: explode('.','1.2.3.4',3) === array('1','2','3.4')- जबकि जावास्क्रिप्ट में, आपको मिलेगा '1.2.3.4'.split('.',3) === ['1', '2', '3']:। किसी को भी आसानी से PHP के तरीके को दोहराने के लिए पता है?
नाथन जेबी

1
मैंने एक कोड टिप्पणी जोड़ दी है कि ऐरे को साफ़ करने के लिए [0] सामान, हो सकता है कि नई चीज़ों को भ्रमित किया जा सके ...
NDM

46

आपको विभाजित करने की आवश्यकता नहीं है। आप उपयोग कर सकते हैं indexOfऔर substr:

str = str.substr(str.indexOf(':')+1);

लेकिन इसके बराबर explodeहोगा split


5
शायद किसी ने सोचा था कि आप छलनी हो रहे हैं कभी-कभी आपको सब कुछ समझाना पड़ता है। उदाहरण के लिए, "आपकी समस्या 'indexOf' द्वारा सबसे अच्छी तरह से हल की गई है ... लेकिन 'विभाजन' आपके प्रश्न का उत्तर शाब्दिक रूप से देता है।"
जोएल मेलन

Downvoter: "कैसे हिम्मत तुम मेरे पूर्वाग्रहों को मान्य करने के बजाय एक सरल और अधिक performant समाधान प्रदान करते हैं ??"
'19

37
String.prototype.explode = function (separator, limit)
{
    const array = this.split(separator);
    if (limit !== undefined && array.length >= limit)
    {
        array.push(array.splice(limit - 1).join(separator));
    }
    return array;
};

PHP के विस्फोट की नकल करना चाहिए।

'a'.explode('.', 2); // ['a']
'a.b'.explode('.', 2); // ['a', 'b']
'a.b.c'.explode('.', 2); // ['a', 'b.c']

7
केवल एक होने के लिए यश , जहां तक ​​मैं देख सकता हूं, PHP की विस्फोट कार्यक्षमता (मूल प्रश्न के अनुसार) के बराबर एक वास्तविक प्रदान करने के लिए ।
18

1
एक सरल और सुरुचिपूर्ण समाधान, मैं चाहता हूं कि यह स्वीकृत प्रतिक्रिया थी।
सोगर जूल



6

एक वस्तु बनाएं:

// create a data object to store the information below.
    var data   = new Object();
// this could be a suffix of a url string. 
    var string = "?id=5&first=John&last=Doe";
// this will now loop through the string and pull out key value pairs seperated 
// by the & character as a combined string, in addition it passes up the ? mark
    var pairs = string.substring(string.indexOf('?')+1).split('&');
    for(var key in pairs)
    {
        var value = pairs[key].split("=");
        data[value[0]] = value[1];
    }

// creates this object 
    var data = {"id":"5", "first":"John", "last":"Doe"};

// you can then access the data like this
    data.id    = "5";
    data.first = "John";
    data.last  = "Doe";

7
थोड़ा ओवरकिल लगता है, प्रतिक्रिया थियो के लिए ty
डग मोलिनक्स


4

यदि आप php को पसंद करते हैं, तो php.JS पर एक नज़र डालें - जावास्क्रिप्ट फट

या सामान्य जावास्क्रिप्ट कार्यक्षमता में: `

var vInputString = "0000000020C90037:TEMP:data";
var vArray = vInputString.split(":");
var vRes = vArray[1] + ":" + vArray[2]; `

मैं उसे देखना चाहता था, लेकिन मेरे सामने केवल गन्दा जावास्क्रिप्ट ही मिला। उम्म emptyArray = { 0: '' },? : - /
मार्सेल कोर्पेल

मैंने यह नहीं कहा है कि यह सबसे अच्छा समाधान है, लेकिन यह एक अच्छा समाधान है यदि आप JavScript के लिए नए हैं और php से परिचित हैं। लेकिन एक कारण था कि मैंने एक और उदाहरण क्यों लिखा। :) "इसे सरल बेवकूफ़
बनाये

यह उचित लगता है, लेकिन मुझे लगता है कि एक को एक प्रोग्रामिंग भाषा को दूसरे में बदलना नहीं चाहिए; यह नौसिखिया के लिए भ्रामक हो सकता है जो सोच सकते हैं कि जावास्क्रिप्ट में OOP C ++ में OOP की तरह है। इसके अलावा, कोई केवल लिंक किए गए फ़ंक्शन को कॉपी-पेस्ट कर सकता है और सोच सकता है कि किसी को उस तरह से एरे को परिभाषित करना है।
मार्सेल कोर्पल

हाँ, वहाँ पूरी तरह से सहमत! लेकिन यह वास्तव में उसके हाथ में कोड नहीं मिल रहा है। और बस। अगर वह php को जानता है, तो शायद वह php में बहुत कम चीजों को याद करता है। यह सबसे अच्छा तर्क है मैं तर्क की बात कर रहा हूं, न कि कॉपी पेस्टल्स समाधान के रूप में, कभी भी अच्छा समाधान नहीं है! मेरा अनुभव यह है कि यह जानने का दिन है कि इसे सीखने के लिए बहुत कुछ है, जब आप सही रास्ते पर होते हैं।
eriksv88

+1 जहां तक ​​मैं देख सकता हूं यह एकमात्र समाधान है जो PHP के समान कार्य करता है। यदि सीमांकक नहीं मिला है तो परिणाम मूल स्ट्रिंग है explode('foo','bar'); // 'bar'यही कारण है कि मैं यहां आया हूं और मेरे उद्देश्यों के लिए एक कॉपी और पेस्ट स्क्रिप्ट है जिसे मैं सीमा के साथ उपयोग करने का इरादा रखता हूं, बिल्कुल सही है। मुझे अपना खुद का सृजन करने के लिए दरकिनार नहीं करना है। क्यों चुंबन सब के बाद पहिया बदलने,
एंडी जी

4

console.log(('0000000020C90037:TEMP:data').split(":").slice(1).join(':'))

आउटपुट: TEMP:data

  • .split () भागों में एक स्ट्रिंग जुदा होगा
  • .join () सरणी को एक स्ट्रिंग पर वापस भेजता है
  • जब आप इसके बिना पहले आइटम चाहते हैं, तो उपयोग करें .slice (1)

इस उत्तर में 554 उत्थान होना चाहिए, स्वीकृत उत्तर नहीं। इसके अलावा, पिछले 3 वर्षों के लिए स्वीकृत उत्तर पूरी तरह से गलत है , सूचकांकों को 0 और 1 जब ओपी ने 1 और 2. के लिए पूछा
NobleUplift

2

जॉन हार्टसॉक की आलोचना करने के इरादे से , यदि किसी दिए गए कोड का उपयोग करने वाले किसी भी व्यक्ति के लिए सीमांकक की संख्या भिन्न हो सकती है, तो मैं औपचारिक रूप से इसके बजाय इसका उपयोग करने का सुझाव दूंगा ...

var mystr = '0000000020C90037:TEMP:data';
var myarr = mystr.split(":");
var arrlen = myarr.length;
var myvar = myarr[arrlen-2] + ":" + myarr[arrlen-1];

1
var str = '0000000020C90037:TEMP:data';    // str = "0000000020C90037:TEMP:data"
str = str.replace(/^[^:]+:/, "");          // str = "TEMP:data"

बहुत ही मजेदार जवाब। मुझे आश्चर्य है कि पारंपरिक विभाजन की तुलना में यह कितना अच्छा प्रदर्शन करता है।
नोबल अपलिफ्ट

1

साइको brm hiss जवाब के लिए बस थोड़ा सा अतिरिक्त (उसका संस्करण IE <= 8 में काम नहीं करता है)। यह कोड क्रॉस-ब्राउज़र संगत है:

function explode (s, separator, limit)
{
    var arr = s.split(separator);
    if (limit) {
        arr.push(arr.splice(limit-1, (arr.length-(limit-1))).join(separator));
    }
    return arr;
}

0

इसलिए मुझे पता है कि यह पद बहुत पुराना है, लेकिन मुझे लगा कि मैं एक ऐसा समारोह जोड़ सकता हूं जिसने मुझे वर्षों से मदद की है। ऊपर बताए अनुसार स्प्लिट के उपयोग से विस्फोट का कार्य क्यों नहीं किया गया? यहाँ यह है:

function explode(str,begin,end)
{
   t=str.split(begin);
   t=t[1].split(end);
   return t[0];
}

यदि आप दो मानों के बीच मान प्राप्त करने का प्रयास कर रहे हैं तो यह फ़ंक्शन अच्छी तरह से काम करता है। उदाहरण के लिए:

data='[value]insertdataherethatyouwanttoget[/value]';

यदि आप दो [मानों] "टैग" के बीच की जानकारी प्राप्त करने में रुचि रखते थे, तो आप निम्न की तरह फ़ंक्शन का उपयोग कर सकते हैं।

out=explode(data,'[value]','[/value]');
//Variable out would display the string: insertdataherethatyouwanttoget

लेकिन मान लें कि आपके पास वे "टैग" नहीं हैं जो ऊपर दिखाए गए उदाहरण की तरह हैं। कोई बात नहीं।

out=explode(data,'insert','wanttoget');
//Now out would display the string: dataherethatyou

इसे कार्रवाई में देखना चाहते हैं? यहां क्लिक करें


0
var str = "helloword~this~is~me";
var exploded = str.splice(~);

विस्फोट किया गया चर सरणी को लौटाएगा और आप सरणी के तत्वों को एक्सेस कर सकते हैं यह सही रूप से विस्फोट हो सकता है [nth] जहां nth उस मूल्य का सूचकांक है जिसे आप प्राप्त करना चाहते हैं


2
यह भी काम नहीं करता है! ब्याह 2 अंकों और स्ट्रिंग्स को मापदंडों के रूप में स्वीकार करता है, न कि एक ~(यह एक वाक्यविन्यास त्रुटि का कारण बनता है)। और ब्याह इस उद्देश्य के लिए नहीं है, यह एक सरणी से आइटम जोड़ना या बाहर निकालना है।
CPHPython

0

इस तरह की कोशिश करो,

ans = str.split (":");

और आप स्ट्रिंग के दो हिस्सों का उपयोग कर सकते हैं जैसे,

ans [0] और ans [1]


2
शायद समझाएं कि यह 8 साल पहले पोस्ट किए गए स्वीकृत उत्तर से कैसे भिन्न है।
लेसे

0

मैंने स्लाइस, स्प्लिट और जॉइन किया, आप सिर्फ एक लाइन कोड लिख सकते हैं

      let arrys = (str.split(":").slice(1)).join(":");

0

यदि आप अपने स्वयं के कार्य को परिभाषित करना चाहते हैं, तो यह प्रयास करें:

function explode (delimiter, string, limit) {
  if (arguments.length < 2 ||
    typeof delimiter === 'undefined' ||
    typeof string === 'undefined') {
    return null
  }
  if (delimiter === '' ||
    delimiter === false ||
    delimiter === null) {
    return false
  }
  if (typeof delimiter === 'function' ||
    typeof delimiter === 'object' ||
    typeof string === 'function' ||
    typeof string === 'object') {
    return {
      0: ''
    }
  }
  if (delimiter === true) {
    delimiter = '1'
  }

  // Here we go...
  delimiter += ''
  string += ''

  var s = string.split(delimiter)

  if (typeof limit === 'undefined') return s

  // Support for limit
  if (limit === 0) limit = 1

  // Positive limit
  if (limit > 0) {
    if (limit >= s.length) {
      return s
    }
    return s
      .slice(0, limit - 1)
      .concat([s.slice(limit - 1)
        .join(delimiter)
      ])
  }

  // Negative limit
  if (-limit >= s.length) {
    return []
  }

  s.splice(s.length + limit)
  return s
}

से लिया गया: http://locutus.io/php/strings/explode/


-1

फेलिक्स क्लिंग का कोड गतिशील (स्वीकृत उत्तर के विपरीत) है लेकिन प्रारंभिक उदाहरण स्ट्रिंग एक भयानक प्रारंभिक बिंदु है। इसलिए गुणवत्ता और गति चाहने वालों के लिए नेत्रहीन अपना जवाब (वह सिर्फ सवाल का जवाब दे रहा है) प्रदर्शित करें :

    var s = '1:2:3:4:5:6';
    console.log(s);
    s = s.substr(s.indexOf(':')+1);
    console.log(s);

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