Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8695

node splice関数で文字列操作

$
0
0

まえがき

splice関数で配列操作してみた。

参考文献

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/join
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

環境

$bash--version
GNU bash, バージョン 5.0.0(1)-release(x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$node--version
v12.13.0
$node
Welcome to Node.js v12.13.0.
Type ".help"for more information.
> console.log("hello");
hello
undefined

スクリプト

3つ。

#1.left_stair.sh

先頭要素取得して末尾要素に追加していくパターン。

#2.right_stair.sh

末尾要素取得して先頭要素に追加していくパターン。

#3.square.sh

上記スクリプトをそれぞれ左と右、右と左に並びて、与える引数を正順と逆順の2つにしたパターン。

$cat left_stair.sh
#!/bin/bash

usage(){cat<<EOF
Usage:
\$$0\$(echo -e '\U1f4a'{0..9})
EOF
}

chk_args(){declare-aargv=()local argv=($@)local argc="${#argv[@]}"["${argc}"-le 1 ]&& usage &&exit 1
}

circle(){echo"$@" | xargs -I@ node -e'
  function mock4(init_args){
    let ary=init_args.split(" ");
    for(let i=1;i<=ary.length;i++){
      let ele=ary.splice(0,1);
      ary.splice(init_args.split(" ").length,0,ele);
      console.log(ary.join(""));
    }
  }
  mock4("@");
  '}

main(){local init_args="$(cat -)";
  chk_args "${init_args}"while read ln;do circle "${ln}";done<<<"${init_args}"}[-p /dev/stdin ]&&cat - | main
[-p /dev/stdin ]||echo-ne"$@" | main

先頭要素が次の対象行の末尾要素に追加されていく様子がわかる。

$echo-e'\U1f4a'{0..9} | ./left_stair.sh 
💡💢💣💤💥💦💧💨💩💠
💢💣💤💥💦💧💨💩💠💡
💣💤💥💦💧💨💩💠💡💢
💤💥💦💧💨💩💠💡💢💣
💥💦💧💨💩💠💡💢💣💤
💦💧💨💩💠💡💢💣💤💥
💧💨💩💠💡💢💣💤💥💦
💨💩💠💡💢💣💤💥💦💧
💩💠💡💢💣💤💥💦💧💨
💠💡💢💣💤💥💦💧💨💩
$cat right_stair.sh
#!/bin/bash

usage(){cat<<EOF
Usage:
\$$0\$(echo -e '\U1f4a'{0..9})
EOF
}

chk_args(){declare-aargv=()local argv=($@)local argc="${#argv[@]}"["${argc}"-le 1 ]&& usage &&exit 1
}

circle(){echo"$@" | xargs -I@ node -e'
  function mock5(init_args){
    let ary=init_args.split(" ");
    for(let i=1;i<=ary.length;i++){
      let ele=ary.splice(-1,1);
      ary.splice(0,0,ele);
      console.log(ary.join(""));
    }
  }
  mock5("@");
  '}

main(){local init_args="$(cat -)";
  chk_args "${init_args}"while read ln;do circle "${ln}";done<<<"${init_args}"}[-p /dev/stdin ]&&cat - | main
[-p /dev/stdin ]||echo-ne"$@" | main

末尾要素が先頭要素に追加されていく様子がわかる。

$echo-e'\U1f4a'{0..9} | ./right_stair.sh 
💩💠💡💢💣💤💥💦💧💨
💨💩💠💡💢💣💤💥💦💧
💧💨💩💠💡💢💣💤💥💦
💦💧💨💩💠💡💢💣💤💥
💥💦💧💨💩💠💡💢💣💤
💤💥💦💧💨💩💠💡💢💣
💣💤💥💦💧💨💩💠💡💢
💢💣💤💥💦💧💨💩💠💡
💡💢💣💤💥💦💧💨💩💠
💠💡💢💣💤💥💦💧💨💩
$cat ./square.sh
#!/bin/bash

usage(){cat<<EOF
Usage:
\$$0\$(echo -e '\U1f4a'{0..9})
EOF
}

chk_args(){declare-aargv=()local argv=($@)local argc="${#argv[@]}"["${argc}"-le 1 ]&& usage &&exit 1
}

circle(){paste-d' '<(./left_stair.sh $(echo-e"$@"))<(./right_stair.sh $(echo-e"$@"|rev))paste-d' '<(./right_stair.sh $(echo-e"$@"))<(./left_stair.sh $(echo-e"$@"|rev))}

main(){local init_args="$(cat -)";
  chk_args "${init_args}"while read ln;do circle "${ln}";done<<<"${init_args}"}[-p /dev/stdin ]&&cat - | main
[-p /dev/stdin ]||echo-ne"$@" | main

きれいだ。

$echo-e'\U1f4a'{0..9} | ./square.sh 
💡💢💣💤💥💦💧💨💩💠 💠💩💨💧💦💥💤💣💢💡
💢💣💤💥💦💧💨💩💠💡 💡💠💩💨💧💦💥💤💣💢
💣💤💥💦💧💨💩💠💡💢 💢💡💠💩💨💧💦💥💤💣
💤💥💦💧💨💩💠💡💢💣 💣💢💡💠💩💨💧💦💥💤
💥💦💧💨💩💠💡💢💣💤 💤💣💢💡💠💩💨💧💦💥
💦💧💨💩💠💡💢💣💤💥 💥💤💣💢💡💠💩💨💧💦
💧💨💩💠💡💢💣💤💥💦 💦💥💤💣💢💡💠💩💨💧
💨💩💠💡💢💣💤💥💦💧 💧💦💥💤💣💢💡💠💩💨
💩💠💡💢💣💤💥💦💧💨 💨💧💦💥💤💣💢💡💠💩
💠💡💢💣💤💥💦💧💨💩 💩💨💧💦💥💤💣💢💡💠
💩💠💡💢💣💤💥💦💧💨 💨💧💦💥💤💣💢💡💠💩
💨💩💠💡💢💣💤💥💦💧 💧💦💥💤💣💢💡💠💩💨
💧💨💩💠💡💢💣💤💥💦 💦💥💤💣💢💡💠💩💨💧
💦💧💨💩💠💡💢💣💤💥 💥💤💣💢💡💠💩💨💧💦
💥💦💧💨💩💠💡💢💣💤 💤💣💢💡💠💩💨💧💦💥
💤💥💦💧💨💩💠💡💢💣 💣💢💡💠💩💨💧💦💥💤
💣💤💥💦💧💨💩💠💡💢 💢💡💠💩💨💧💦💥💤💣
💢💣💤💥💦💧💨💩💠💡 💡💠💩💨💧💦💥💤💣💢
💡💢💣💤💥💦💧💨💩💠 💠💩💨💧💦💥💤💣💢💡
💠💡💢💣💤💥💦💧💨💩 💩💨💧💦💥💤💣💢💡💠

あとがき

こういうの作ろうとおもうといろいろ調べて好奇心や探究心が湧いてくるから、楽しい。

splice関数便利。

以上、ありがとうございました。


Viewing all articles
Browse latest Browse all 8695

Trending Articles