Node Jsで文字列を分割する方法は?

How to split a string by Node Js?


質問 written by HackedByChinese @2014-02-03 20:57:37Z

: 8 : 4 : 30

私の配列:

var str=['data1,data2 '];

利用した:

var arr = str.split(",");

ただし、1つのエラーが表示されます。 TypeError:オブジェクトdata1、data2にはメソッド 'split'がありません。 この問題を解決するにはどうすればよいですか。

私の出力は次のようになります。

arr= data1,data2
// or
arr[0]=data1;
arr[1]=data2;

この問題を解決するにはどうすればよいですか?

コメント 1

質問をありがとう。私は同じ問題を抱えています。

written by ヴィシュヌプラサード @2015-01-02 09:40:38Z

回答 1 written by davidkonrad @2015-10-08 08:00:31Z
12

これを行う必要があります:

var arr = str.toString().split(",");

" TypeError:オブジェクトdata1、data2にメソッド 'split'がない"は、変数が文字列と見なされないことを示します。 したがって、それを型キャストする必要があります。


アップデート08.10.2015上記の答えが「 汚い回避策 」だと思う人がいることに気づきました。驚くべきことに、このコメントは支持されています。 実際、それは正反対です-3(!)他が示唆するようにstr[0].split(",")を使用することは本当の「汚い回避策」です。 どうして? これらの場合に何が起こるか考えてください:

update 08.10.2015 I have noticed someone think the above answer is a "dirty workaround" and surprisingly this comment is upvoted. In fact it is the exact opposite - using str[0].split(",") as 3 (!) other suggests is the real "dirty workaround". Why? Consider what would happen in these cases :

str[0].split(",")str[0].split(",") strが空の配列を保持するとすぐに完全に失敗しstr何らかの理由で、 String.prototype保持していないか、 strが複数のstr保持している場合は満足のいく結果になりません。 str[0].split(",")を使用して、 str常に1つの文字列を正確に保持し、他の何かが決して悪いことではないことを盲目的に信頼しstr toString()は、数値、配列、オブジェクト、ブール値、日付、さらには関数でサポートされています。 str[0].split()は、エラーを発生させ、スコープ内でのさらなる実行を停止し、それによりアプリケーション全体をクラッシュさせる可能性があります。

本当にstr[0].split()を使用したい場合は、少なくともいくつかの最小限の型チェックを行います。

str[0].split(",") will fail utterly as soon str holds an empty array, for some reason not is holding a String.prototype or will give an unsatisfactory result if str holds more than one string. Using str[0].split(",") blindly trusting that str always will hold 1 string exactly and never something else is bad practice. toString() is supported by numbers, arrays, objects, booleans, dates and even functions; str[0].split() has a huge potential of raising errors and stop further execution in the scope, and by that crashing the entire application.

コメント 1

それが働いたおかげで

written by ..-ヴィシュヌプラサード @2015-01-02 09:40:56Z

コメント 2

それでも、配列の.toString()実装を使用して,常に独自のデリミタとして使用します。それは石に設定されていません。将来のブラウザが代わりに改行文字を使用することにした場合はどうなりますか?

written by シャドウウィザード @2015-10-08 07:54:25Z

コメント 3

['data1,data2','data3,data4'].toString()'data1,data2,data3,data4'を返すと仮定することを意味します-石に設定されているとは思わない。最善のアプローチは、自分で参加することです。つまり、 ['data1,data2','data3,data4'].join(',')

written by シャドウウィザード @2015-10-08 08:07:34Z

コメント 4

@ShadowWizard、はい!str = ['data1,data2','data3,data4']を参照して、意味がわかりました-あなたは絶対に正しいです!この場合、ブラウザまたはV8が将来data1,data2,data3,data4を返すとは限りません。

written by -davidkonrad @2015-10-08 08:11:46Z

回答 2 written by Sergio @2016-12-20 10:20:25Z
5

開始点がstring含むarrayである場合。 これは動作するはずです:

var arr = str[0].split(",");

それ以外の場合は、コードが期待どおりに機能するための開始点として文字列が必要です。

Otherwise you should have a string as starting point for your code to work as you expected:

配列にさらに要素がある場合は、forループで要素を繰り返す必要があります。

編集して他のケースを追加します。

その配列に複数の文字列がある場合は、より注意して次のようなことを行う必要があります。

If you have several strings in that array, then you should be more carefull and do something like this:

コメント 1

これが選ばれた答えであるべきです。現在の勝者は、何も教えていない汚い回避策です。

written by クリントイーストウッド @2015-03-26 00:46:42Z

コメント 2

@Jonathan- Array.toString()を「汚い回避策」とはまったく考えていません。実際、それは安全で安全な方法です。str[0].split(",")がアプリケーション全体をクラッシュさせる可能性がある理由はかなり明らかだと思います。理由を説明するために私の回答を更新しました。

written by -davidkonrad @2015-10-08 06:41:22Z

コメント 3

@davidkonradは、その配列内に複数の文字列のケースを含めるための編集を追加しました。

written by セルジオ @2016-12-20 10:21:21Z

回答 3 written by Felix Kling @2014-02-03 20:56:04Z
3

あなたが言ったように、 strは配列(1つの要素)です。 配列に含まれる文字列を分割する場合は、最初に配列にアクセスする必要があります

var arr = str[0].split(",");
回答 4 written by Amine_Dev @2015-04-15 16:07:48Z
1

2つの日付があるとしましょう:

日付1:1989/01/17

日付2:2000年2月20日

それらを比較したい場合は、単に文字列を分割し、このように比較します

var date1= date1.toString().split("/");

var date2= date2.toString().split("/");

var a = parseInt(date1[2] + date1[1] + date1[0]);

var b = parseInt(date2[2] + date2[1] + date2[0]);

if(a <b){

alert( "date2はdate1よりも大きい")}

} else if(a> b){

alert( "date1はdate2よりも大きい")

} else {

alert( "date 1とdate2は等しい");

}