JavaScriptの配列ショートハンド (AtCoder用)

2020-07-05
javascript%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0atcoder
    

目次

概要

JavaScriptのショートハンドの個人的なメモです。

特にAtCoderとかで利用頻度が高い物をまとめました。

文字列と配列の変換

スペースで区切られた数字が並んだ文字列を配列に変換

let input = "10 2 45 11 9 1 72"
let arr = input.split(" ").map(Number)
// [10,2,45,11,9,1,72]

スペースで区切られた数字が並ぶ文字列が複数行に並ぶ際に二次元配列に変換

let input = `1 2 3
4 5 6
7 8 9`
let arr = input.split("\n").map(e => e.split(" ").map(Number))
// [[1,2,3],[4,5,6],[7,8,9]]

配列をスペースで区切られた文字列に変換

let input = [10, 2, 45, 11, 9, 1, 72]
let arr = input.join(" ")
// "10 2 45 11 9 1 72"

文字列の置換

let input = "1 2 3"
let dst = input.split("1").join("a")
// "a 2 3"

配列初期化

通常の配列初期化

// 長さなしの配列 
let arr = []
let arr = new Array()
// 長さ指定の配列 
let arr = new Array(10)

多次元配列初期化

map使ったりすると浅いコピーになってしまうので Array.from() を使う。

// 3x3の二次元配列
let arr = Array.from(new Array(3), () => new Array(3));
// [[null,null,null],[null,null,null],[null,null,null]]
// 3x2x1の配列
let arr = Array.from(new Array(3), () => Array.from(new Array(2), () => new Array(1)));
// [[[null],[null]],[[null],[null]],[[null],[null]]]

特定の値で埋められた配列

fill を使う

let arr = new Array(10).fill(1)
// [1,1,1,1,1,1,1,1,1,1]
let arr = Array.from(new Array(3), () => new Array(3).fill(2));
// [[2,2,2],[2,2,2],[2,2,2]]

ソート

昇順ソート

let arr = [1, 9, 3, 5, 7, 2]
arr = arr.sort((a, b) => a - b)
// 1,2,3,5,7,9

降順ソート

let arr = [1, 9, 3, 5, 7, 2]
arr = arr.sort((a, b) => b - a)
// 9,7,5,3,2,1

filter

配列から正の数のみ取得

let arr = [1, -9, 3, -5, 7, -2]
arr = arr.filter(e => e >= 0)
// [1,3,7]

配列から奇数(偶数)のみ取得

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = arr.filter(e => e % 2)
// [1,3,5,7,9]
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = arr.filter(e => e % 2 === 0)
// [2,4,6,8]

reduce

配列の数値の合計値を求める

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let sum = arr.reduce((a,b) => a + b)
// 45

配列のコピー

浅いコピー

let arr1 = [1,2,3]
let arr2 = arr1
arr1[0] = 0
// arr1:[0,2,3]
// arr2:[0,2,3]

深いコピー

let arr1 = [1,2,3]
let arr2 = arr1.slice()
let arr3 = [].concat(arr1)
let arr4 = [...arr1]
let arr5 = Array.from(arr1)

配列の重複削除

連想配列を利用した抽出

let arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
let list = {}
arr.forEach(e => list[e] = 1)
arr = Object.keys(list).map(Number)
// [1,2,3,4]

Setを使う

let arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
arr = Array.from(new Set(arr))
// [1,2,3,4]
    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

AWS Amplify に Next.js (SSG) で作ったアプリをデプロイする
はじめに 操作 Next.js (React) アプリの作成、Gitへのプッシュ AWS Amplifyでプロジェクト作成 参考にしたサイト この記事では、React / Next.js アプリケーションを作成し、AWS Amplify…

Typescriptに入門した
初期作業 とりあえずHello World 初期作業 typescript環境を作っていきます。 とりあえずHello World まず、次のサンプルコードを作成します。 typescriptファイルをビルドします。

Vue/Nuxt.js 触ってた人が Next.js に入門する
はじめに 実施環境 学習ガイド Create a Next.js App Navigate Between Pages ページの作成 リンク Assets, Metadata, and CSS Assets メタデータ CSS…

10進数から2進数 2進数から10進数への変換 JavaScript
10進数から2進数 2進数から10進数 テスト 10進数から2進数、2進数から10進数への変換を行うJavaScriptのコードの紹介。 JSの場合、10進数から2進数への変換はメソッド。2進数から1…

JavaScriptでワーシャルフロイド法を実装
AtCoder ABC012 D問題 D - バスと避けられない運命 解説 実装 AtCoder ABC012 の D問題でワーシャルフロイド法が利用できる問題が出てきたので、 JavaScriptで実装しました。 AtCoder ABC012 D問題 D…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Firebase + Nuxt で認証付きページを作るときに参考にしたいところ
Webアプリケーションのセッション管理にJWT導入を検討する際の考え方 Service Worker によるセッション管理 ユーザー セッションの管理 Nuxt.jsとFirebaseでSPA×SSR×PWA×サーバーレスを実現する CookieとセッションとJWT SSR…

JavaScriptで幅優先探索 (bfs) を実装する
bfsソースコード 前提 bfs関数 テストコード JavaScriptで幅優先探索 (bfs) を実装し簡単な最短経路の探索問題を解いてみました。 AtCoderの問題を参考にしています bfsソースコード 前提 bfs 関数の定義について 引数 table…

JavaScriptでbig-integerでできること
定数 メソッド abs add, plus and bitLength compare compareTo compareAmb divide, over divmod equals, eq greater, gt greaterOrEquals, geq…

ソースコードレビューのポイントをまとめる
ソースコードレビュー時のポイントを各所のブログから集めてまとめました。以下 https://gist.github.com/s-yoshiki/9e446d69cf388703a4711f7e69cba173

最新の投稿

PHP-FPM(php7.4) Apache2.4 でWebサーバ構築 on CentOS8
環境 php7.4 のインストール apacheのインストール php-fpmの設定を変更する php-fpm の起動 apacheの起動 確認 おまけ: エラーと解決方法 "System has not been booted with systemd as…

CentOS8 に PHP7.4 インストール
環境 普通にインストールしようとするとphp7.2がインストールされる modularityについて php7.4 インストール CentOS8 に modularity を利用して PHP7.4をインストールした際のメモです。 環境 CentOS8.…

UNIXドメインソケット通信 vs INETドメインソケット通信 php-fpmで動作させる場合の違いについて
結論 ソケット通信について ソケットについて ソケット通信の種類 UNIXドメインソケット通信を行う場合のメリット 参考にしたサイト php-fpm の設定方法で調べた際にIPとポートで設定するパターンとUNIX…

Amplify CLI のインストール
Amplify CLI のインストール Amplify CLI の設定 バックエンド環境作成 Amplify CLI のインストールから設定まで Amplify CLI をインストール 設定 Amplify アプリを初期化 Amplify CLI…

AWS Amplify に Next.js (SSG) で作ったアプリをデプロイする
はじめに 操作 Next.js (React) アプリの作成、Gitへのプッシュ AWS Amplifyでプロジェクト作成 参考にしたサイト この記事では、React / Next.js アプリケーションを作成し、AWS Amplify…

Typescriptに入門した
初期作業 とりあえずHello World 初期作業 typescript環境を作っていきます。 とりあえずHello World まず、次のサンプルコードを作成します。 typescriptファイルをビルドします。

Vue/Nuxt.js 触ってた人が Next.js に入門する
はじめに 実施環境 学習ガイド Create a Next.js App Navigate Between Pages ページの作成 リンク Assets, Metadata, and CSS Assets メタデータ CSS…

PHP-Parser で PHP5からPHP7で動くコードに自動修正するツールが作る夢をみた
ツールが備える機能条件 PHP-Parser について PHP-Parser の簡単なサンプル ASTオブジェクトの置換・変更 PHP5からPHP7への変更内容を実装する ex1 includeパスを変更する ex2 例外クラスを Exception…

PHP5からPHP7への移行ツールを作るための解析・自動修正ツールを調べる
PHP5からPHP7への下位互換のない機能 使えそうなツールの洗い出し PHPStan phan php7cc php7mar php-to-7-aid Rector php-ast PHP-Parser まとめ 追記 (2021/01/0…

CentOS8にDNFでPerl5.30のインストール
Modularityについて Perl5.30インストール dnf module でハマったところ その他 Perl5.26の場合 Perl5.24の場合 CentOS8 or CentOS Streamに Perl5.30をDNF…

Tags

Dates

© 2021   404 motivation not found