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]
    

関連記事

JavaScriptで優先度付きキューを実装する
優先度付きキューについて ソース 参考 JavaScriptで優先度付きキュー (プライオリティキュー) を実装する 優先度付きキューについて 具体的には次のような機能があります。 キューに対して要素を優先度付きで追加 (push…

next_permutationをJSで実装する
ソース 使い方 参考 C++で提供されている順列を生成する next_permutation のJS実装です。 ソース 順列が存在する場合はtrueを返し、そうでなければfalse…

応用情報技術者試験の合格体験記
受験時のステータス 受験結果 対策 スケジュール 午前問題 午後問題 参考書等 令和…

[JS]ラジアンから度数に度数からラジアンに変換する
コード 度数からラジアンへ ラジアンから度数へ サンプル ラジアンから度数に度数からラジアンに変換する際のスニペット。 コード 度数からラジアンへ ラジアンから度数へ サンプル

JS/TSのclassでclass名を取得する
コード JS/TSのconstructorを利用して自分自身のクラス名を取得する際のメモ。 コード このコードの結果は次のようになります。

JSで32ビット符号付き整数に対してのビット演算でハマった
具体例 参考にしたサイト JSでサブネットマスクの計算を行おうとしたとき、ビット演算でハマりました。その時のメモです。 JSでサブネットマスクの計算 JSでビット演算子を利用する場合 3…

JSでIPアドレスがサブネットマスクで指定した範囲内にあるか判定する
IPアドレスが指定した範囲内にあるかどうか判定 参考にしたサイト JSでIPアドレス(IPv4)が指定したサブネットの範囲に含まれるか判定するロジックを作った時の記録です。 IPアドレスが指定した範囲内にあるかどうか判定 処理としては、IP…

プログラムの数値計算で発生する誤差の種類 丸め誤差・打ち切り誤差・桁落ち
はじめに 誤差の種類 丸め誤差 打ち切り誤差 桁落ち 情報落ち 桁溢れ誤差 参考にしたサイト コンピュータで出てくる誤差はいくつかありますが、 それらをコードに落として整理しました。 はじめに 例えば の計算の答えは 0.6666666666…

JSでサブネットマスクの計算
JSによるサブネットマスク関連の計算 IPv4アドレス文字列をNumber型に変換する CIDR と サブネットの相互変換 ネットワークアドレス と ブロードキャストアドレス クラス 改めて計算方法を整理する 参考にさせていただいたサイト JSでIPv…

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

最新の投稿

JavaScriptで優先度付きキューを実装する
優先度付きキューについて ソース 参考 JavaScriptで優先度付きキュー (プライオリティキュー) を実装する 優先度付きキューについて 具体的には次のような機能があります。 キューに対して要素を優先度付きで追加 (push…

AWS Amplify で コンテナベースのデプロイを行い REST API を構築
検証した環境 やってみる 初期準備 パイプラインを確認 終了処理 参考 AWS Amplify で コンテナベースのデプロイを行い REST API を構築した際のメモです。 検証した環境 amplify 5.1.…

Pythonでソケット通信を実装しメッセージの送受信を行う
ソース server.py client.py 動かしてみる 参考 Pythonでソケット通信を実現する方法です。 ソース server.py サーバ側のソースです。 client.py…

next_permutationをJSで実装する
ソース 使い方 参考 C++で提供されている順列を生成する next_permutation のJS実装です。 ソース 順列が存在する場合はtrueを返し、そうでなければfalse…

応用情報技術者試験の合格体験記
受験時のステータス 受験結果 対策 スケジュール 午前問題 午後問題 参考書等 令和…

[JS]ラジアンから度数に度数からラジアンに変換する
コード 度数からラジアンへ ラジアンから度数へ サンプル ラジアンから度数に度数からラジアンに変換する際のスニペット。 コード 度数からラジアンへ ラジアンから度数へ サンプル

CentOS8 に Python + OpenCV をインストール
インストール テスト CentOS8 で標準で提供されているパッケージで Python + OpenCV 環境を構築する方法です。 検証した環境は CentOS8.3 (Docker) です。 インストール まず opencv…

[Perl] CentOS8 に plenv をインストール
インストール Step1 事前準備 Step2 PATHを通す (README通りにインストール) Step2 PATHを通す ($HOME以外にplenvをインストール) Step3 Perlインストール Step4 cpanmインストール CentOS…

JS/TSのclassでclass名を取得する
コード JS/TSのconstructorを利用して自分自身のクラス名を取得する際のメモ。 コード このコードの結果は次のようになります。

CentOS6(Docker)でyum update できなくなった
エラー内容 対応 CentOS6.10 で yum update しようとしたところエラーが出てアップデートできなかったので対応した時の記録 エラー内容 以下のようなエラーが出ました。 対応 を以下のように変更したところ解決しました。

Tags

Dates

s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV
© 2021   404 motivation not found