dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

emacs で Typescript を Javascript モードにする

2021-10-27 00:43:03 | emacs
emacs で Typescript を javascript モードにする方法のメモ。
.emacs に以下を記述します。
以下の設定では TAB を 2 文字分にしています。
(add-to-list 'auto-mode-alist '("\\.ts\\'" . javascript-mode))
(add-hook 'js-mode-hook
          (lambda ()
            (make-local-variable 'js-indent-level)
            (setq js-indent-level 2)))


node.js での json オブジェクトの比較

2021-10-27 00:26:13 | Node.js
node.js で json オブジェクトを比較する方法のメモ

2つの json オブジェクトが一致しているかを比較するために、以下の compare メソッドを作成しました。
module.exports = class JsonUtil {
  static compare(obj1, obj2) {
    if (obj1 instanceof(Array)) {
      if (! (obj2 instanceof(Array))) return false;
      if (obj1.length != obj2.length) return false;
      for (let i = 0; i < obj1.length; i++) {
        const res = JsonUtil.compare(obj1[i], obj2[i]);
        if (! res) return false;
      }
    }
    else if (obj1 instanceof(Object)) {
      if (obj2 instanceof(Array) || ! (obj2 instanceof(Object))) return false;
      if (Object.keys(obj1).length != Object.keys(obj2).length) return false;
      for (let [key, val1] of Object.entries(obj1)) {
        const val2 = obj2[key];
        const res = JsonUtil.compare(val1, val2);
        if (! res) return false;
      }
    }
    else if (obj1 !== obj2) {
      return false;
    }

    return true;
  }
}

上記の compare メソッドで json の比較を行ってみます。
const JsonUtil = require('JsonUtil');

console.log(JsonUtil.compare('abc', 'abc'));
console.log(JsonUtil.compare([1, 2, 3], [1, 2, 3]));
console.log(JsonUtil.compare({"a": 1, "b": 2}, {"a": 1, "b": 2}));
console.log(JsonUtil.compare({"a": 1, "b": 2}, {"a": "1", "b": "2"}));

実行結果は以下の通り想定通りの結果となりました。
true
true
true
false