配列とif(javascript)の李さんです.

3882 ワード

上に上がってまずコードを貼ります.
function sortString(str,s){
    if(str && typeof str === 'string' && str.length > 1 && (s = s||',')){
        return str.split(s).filter(function (a,i,arr){
            return arr.indexOf(a) === arr.lastIndexOf(a) || i === arr.indexOf(a);
        }).sort(function(a,b){
            return +a - +b;
        }).reduce(function (a,b){
            return [a,b].join(s);
        });
    }
    return str;
}
はい、以上が今日の内容です.
var str = sortString('01,02,03,03,02,01,05,06,04');
console.log(str)
以上のテストコードの出力結果は:
"01,02,03,04,05,06"
分かりました.続けなくてもいいです.無駄話が多いです.
このままではあまりにもやりすぎですか?ちょっと説明します.このコードのやるべきことは、「01,01,03,06,01,02,06,02,02,03,04,09,01」のような文字列を、「、」で分けて並べ替え、やり直すという利点があります.唯一の結果を得て、先にこのコードの由来を説明してください.前回はsql文をクライアントに渡しました.検索した結果、フィールドがあります.私が上にあげたこの文字列の形です.これはコードをつなぎ合わせたものです.つまり、メインテーブルを検索して、サブテーブルのあるフィールドをこのようにつづり合わせました.サブテーブルの数は一定ではないです.
このような表
コード
テキスト
01
タイプ
02
二種類
03
3つのタイプ
サブテーブルデータ
データ
01,03
02,03
01,02,03
メインテーブルのデータが変わります.
01,03,02,03,01,02,03
はい、由来が終わりました.このコードの役割を説明します.上に言いました.
ここからパラメータを説明します.
str :     
s   :         
ifの使い方については、ifで書いた文はこうです.
if(str && typeof str === 'string' && str.length > 1 && (s = s||','))
記号の間隔で
第一段はここでstrをブックに変えます.
第二段はtypeofの使い方です.何も言いません.typeofからの結果は全部小文字で書いてください.
第三段は文字列であることを確認しますので、長さは判断できます.長さは1より小さいので、何もしなくてもいいです.操作せずにそのまま返してください.
第四段は(s=s𞓜𞓜'、')で、まずs=s 124;𞓜'、'を説明します.ここで言っているのはパラメータsを渡さないようにするためです.デフォルト値はs、124124; 124;記号が遮断されています.s値があれば、falseに変換されないということです.sは自分自身の値になります.sはfalseに変換されます.伝えなくてもいいですここに置いてあるのはどういう意味ですか?×,この部分を削除してifの中で最初の行に入れてください.問題はありません.これは全部分かります.連続的に同じ番号でコピーしてください.a=b=c=1です.つまり、1をcに割り当てて、bにcを与えて、aにあげます.「a=」は書かなくてもいいです.代わりにa=(b=(c=1)を書いても大丈夫です.分かりましたか?c=1という表現にも結果があります.彼の結果は1です.だから、上のs=s 12464;124'、'の値はs 124124'、'です.そしてここはifの条件の中ですから、必ずbookの値に変えて判断されます.とにかくtrueなので、ifの中に入れても実際的な意味はありません.新人をおどかすことです.
if解釈が終わったら、オリジナルのいい方法を始めます.
――原型を見て驚いてはいけません.ここでは原型の問題については話さないです.
javascriptの中でstringタイプの超使いやすい方法splitは一つのstringを一つの配列に切断して、あなたが設定したパラメータで切って、多く説明しないので、第一歩はstrを配列に分離しました.
配列のfilter方法を呼び出します.この方法にはパラメータ(コールバック関数)があります.配列の各要素に一回のコールバック関数を呼び出して、コールバック関数を返した結果、trueの要素を集めて新しい配列として返します.
a :    
i :       
arr:    
配列方法indexOfは、要素のインデックスを取得し、lastIndexOf、要素の最後の出現のインデックスは、この2つは同じです.要素が唯一で、重い必要がありません.もしこの2つが同じではないなら、要素が重複していることを説明します.この場合は、最初のものを選ぶのは簡単です.説明は一番目です.これは入れられます.他のはだめです.重くしてください.
それから、配列のsort方法を呼び出します.並べ替え、コールバック関数は二つのパラメータがあります.a、b、コールバック関数はaとbの比較結果を定義します.0は等しいです.正の数aは大きいです.負の数bは大きいです.だから、私のコールバック関数の中で直接二つの数を減らしました.その後、マイナスになる前に小さな演算をしました.これは速い文字列を数字に変換します.失敗したらNaNになります.
最後のレデュースはまたxを装っているようです.(汗、直接joinができることに気づいたばかりです.)も少し説明してください.レデュースという言葉の意味は簡略化されていますが、この方法は全く簡単ではないです.一つのパラメータだけを与えましたが、この方法は二つのパラメータを受信できます.一つ目はコール、二つ目は初期値です.(つまり、初めてコールバックしたときのパラメータaの値)コールバック関数パラメータ(私は2つしか使いませんでしたが、4つあります.)は、ここを参照してください.
previous Valueが前回実行した結果、最初の場合は与えられた初期値または最初の値currentValue現在値currentIndex現在値が配列中のインデックスarray配列自体である.
この方法は配列の要素と前回実行した結果をフィードバックに渡し、最後に一つの要素を返します.プログラムの中で、二つの文字列をjoinに上げて、次のjoinに渡します.得られた結果は直接joinと同じです.ES 5に追加されたAray方法を参照して詳しく説明してください.最後にその方法は無駄です.コードを補えばいいです.今は配列があります.
var arr = [
    {id:1,text:' '},
    {id:2,text:' '},
    {id:3,text:' '},
    {id:4,text:' '},
    {id:5,text:' '}
];
IDを取り出して文字列にしたいですが、どうすればいいですか?
var str2 = arr.reduce(function (a,b,i,arr){
     return [a,b.id].join();
 },'').substr(1);
 console.log(str2);
もちろんあなたもmapで作ることができます.
var str2 = arr.map(function (a) {
    return a.id;
}).join()
console.log(str2);
以上