質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

1160閲覧

Arrayからnullのものをfilterしたい

cappuccinon

総合スコア17

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/05/12 11:23

前提・実現したいこと

Arrayからfilterでnullのみ取得したいが期待した結果が返ってこない。
(filterで想定した結果が返ってこない理由を知りたく、forでループさせるなど別の解法をお聞きしているわけではありません)

該当のソースコード

Typescript

1const arr = new Array(4); 2const fil = arr.filter(value => value== null); 3console.log(fil.length); // 4を期待するが、0が出力(NG)

試したこと

通常の配列であれば期待した結果が返ってきます。

Typescript

1const arr = [1, null, undefiend]; 2const fil = arr.filter(value => value == null); 3console.log(fil.length); // 2を期待し、2が出力される(OK)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

MDNの解説に記載されています。

すでに削除された添字や、まだ値が代入されていない添字に対しては呼び出されません。

Arrayで作成した配列にはまだ値が代入されていないため、関数が呼ばれていないと思われます。

Array.prototype.filter() - JavaScript | MDN

ちなみに意図した戻り値を期待する場合は、fillで埋めると返ってきます。

js

1const arr = new Array(4).fill(null); 2const fil = arr.filter(value => value== null); 3console.log(fil.length); // 4

投稿2021/05/12 11:31

yuuyu

総合スコア1139

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cappuccinon

2021/05/12 11:55

回答ありがとうございます。 環境を記述していなかったため申し訳ないのですがES5のためfillが使用できずnull埋めする別の綺麗な書き方はありますでしょうか。
maisumakun

2021/05/12 12:06

「forでループさせる」か、「Array.fillあるいはArray.fromをpolyfillする」の2択が主な手段です。
cappuccinon

2021/05/12 12:17

解法までありがとうございました。 今回お二人ともベストアンサーにさせていただきたいのですが、期待する解法まで提示いただいたyuuyu様を選ばせていただきました。
guest

0

new Array(長さ)で宣言した配列は、undefinedすら入っていない空の状態です(「疎な配列」とも呼ばれます)。filterは要素が入っているところのみ実行しますので、空の配列ではコールバックは実行されず長さ0の配列を返すだけになります。

なお、[1,,3]のようにコンマだけで区切る、あるいはdelete arr[0]のようにdelete演算子を使うことで要素のない状態を作り出すことが可能です。

投稿2021/05/12 11:27

編集2021/05/12 11:29
maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cappuccinon

2021/05/12 12:02

早々に回答ありがとうございます。 長さを確認しましたが、長さは指定した要素数を返しました。 回答者様と違う結果となり、こちらが何か違う認識をしていますでしょうか。 const arr = new Array(4); console.log(arr.length); // 4を期待し、4が出力(OK) 環境(Target)はES5になります。
maisumakun

2021/05/12 12:03

> こちらが何か違う認識をしていますでしょうか。 はい、filterの結果が長さ0、と書いただけです。元の配列には言及していません。
cappuccinon

2021/05/12 12:04

そうですね、大変失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問