[ JavaScript ] 連想配列を複数の要素で並び替える

例えば objects をid,年齢の昇順に並び替える実装を Vanilla JavaScript で行なった場合は以下のようになります。

const objects = [
    {id: 1, name: 'foo', age: 22},
    {id: 3, name: 'foobar', age: 20},
    {id: 2, name: 'foobar', age: 24},
    {id: 2, name: 'foobar', age: 30},
    {id: 2, name: 'bar', age: 20},
];

const compareId = (a, b) => {
    if (a.id > b.id) {
        return 1;
    } else if (a.id === b.id) {
        return 0;
    } else {
        return -1;
    }
};
const compareAge = (a, b) => {
    if (a.age > b.age) {
        return 1;
    } else if (a.age === b.age) {
        return 0;
    } else {
        return -1;
    }
};


const compare = (funcs, a, b) => {
    for (let func of compareFuncs) {
        if (func(a, b) === 1) {
            return 1;
        } else if (func(a, b) === -1) {
            return -1;
        }
    }
    return 0;
};


const wrappedCompare = (funcs, a, b) => {
    return compare(funcs, a, b)
};

const compareFuncs = [compareId, compareAge];
const sortedObjects = objects.sort(wrappedCompare.bind(this, compareFuncs));
console.log(sortedObjects);

出力結果は以下

[ { id: 1, name: 'foo', age: 22 },
  { id: 2, name: 'bar', age: 20 },
  { id: 2, name: 'foobar', age: 24 },
  { id: 2, name: 'foobar', age: 30 },
  { id: 3, name: 'foobar', age: 20 } ]

ちなみに lodash の _.sortBy 関数を使うともっと簡潔に書くことができます。

const _ = require('lodash');

const objects = [
    {id: 1, name: 'foo', age: 22},
    {id: 3, name: 'foobar', age: 20},
    {id: 2, name: 'foobar', age: 24},
    {id: 2, name: 'foobar', age: 30},
    {id: 2, name: 'bar', age: 20},
];


const compareAge = (obj) => {
    return obj.age;
};

const compareId = (obj) => {
    return obj.id;
};


const sortedObjects = _.sortBy(objects, [compareId, compareAge]);
console.log(sortedObjects);

[ Python ] AWS KMS を使って暗号化と復元を行うkms_encrypterを作った

表題の通りです。AWS KMS を使って暗号化と復元を行う kms_encrypter を作りました。

インストール

$ pip install kms_encrypter

使い方

‘YOUR_AWS_KMS_ID’は作成した AWS KMS で作成したキーIDを代入してください。

from kms_encrypter import KMSEncrypter
encrypter = KMSEncrypter('YOUR_AWS_KMS_ID')
msg = 'hello , world'
encrypted_msg = encrypter.encrypt(msg) 
assert encrypter.decrypt(encrypted_msg) == msg 

Vue-TypeScript-Starter を作った

Vue-TypeScript-Starter を使うと Vue + TypeScript + Webpack + ES6 の環境を一瞬で構築することができます。

使い方

 $ git clone https://github.com/haradashinya/Vue-Typescript-Starter.git ${project_name>}
 $ cd ${project_name}
 $ npm install
 $ npm run dev