3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaScriptの多次元配列から特定列の重複値の行を削除する方法

Posted at

前提

GASにて二次元配列を操作している際に、はまってしまったので、備忘録。

失敗例

当初、最下部の「参照」にて参考にしていたコードを使用していたが、thisがグローバルオブジェクトを指定してしまい、対象の配列データの一部でも先に定義されていた場合、機能しなくなる。

main.js
function getUniqueArray_2d(arr, num) {
 arr = arr.filter(row => {
   if (!this[row[num]] && row[num] != "") {
     return this[row[num]] = true;
   }
 });
 return arr
}

const arr = [
	["A", "Bill", "1", "AAA"],
	["A", "Alice", "3", "BBB"],
	["A", "Chris", "4", "CCC"],
	["B", "Chris", "5", "DDD"],
	["B", "Chris", "6", "EEE"],
	["C", "Davis", "7", "FFF"]
];

getUniqueArray_2d(arr, 1) // 重複判定する列番号を指定

なお、事前に定義されていない場合、正しいデータが取得できる。

修正

thisがグローバルオブジェクトを指定してしまうため、thisの代わりのオブジェクトを宣言してから実行する。

main.js
function getUniqueArray_2d(arr, num) {
  const unique = {} // 空のオブジェクトを宣言
  arr = arr.filter(row => {
    if (!unique[row[num]] && row[num] != "") {
      return unique[row[num]] = true;
    }
  });
  return arr
}

これでうまくいきました。

参照

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?