Closed6

lodashが便利。

若槻龍太若槻龍太

配列を指定要素数ごとのチャンクに分けられる。

https://lodash.com/docs/4.17.15#chunk

_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
 
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]

Amazon DynamoDBのBatchWriteItem()や、Firebase Cloud MessagingのsendMulticast()を実行する際に役立った。

JS組み込み関数だけを使う場合。
https://stackabuse.com/how-to-split-an-array-into-even-chunks-in-javascript/

function sliceIntoChunks(arr, chunkSize) {
    const res = [];
    for (let i = 0; i < arr.length; i += chunkSize) {
        const chunk = arr.slice(i, i + chunkSize);
        res.push(chunk);
    }
    return res;
}

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(sliceIntoChunks(arr, 3));
若槻龍太若槻龍太

key-valueペアをオブジェクト化できる。
https://lodash.com/docs/4.17.15#fromPairs

_.fromPairs([['a', 1], ['b', 2]]);
// => { 'a': 1, 'b': 2 }

JS組み込み関数だけを使う場合。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries

const entries = new Map([
  ['foo', 'bar'],
  ['baz', 42]
]);

const obj = Object.fromEntries(entries);

console.log(obj);
// Expected output: Object { foo: "bar", baz: 42 }

これはfromEntries()を使えば良さそう。

若槻龍太若槻龍太

ソート。すべてのiterateesに順序を指定可能。指定されていないiterateesは値が昇順で並べ替えられる。
https://lodash.com/docs/4.17.15#orderBy

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 34 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 36 }
];
 
// Sort by `user` in ascending order and by `age` in descending order.
_.orderBy(users, ['user', 'age'], ['asc', 'desc']);
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]

Array.prototype.sort()だとユニコード順に並び替えられてしまう。 数値の配列はlodashでも並び替えできない。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
https://qiita.com/ndj/items/689e3eec398fc3c564fe

若槻龍太若槻龍太

ソート。iteratees は 1 つの引数のみ。iteratees以外はすべての値が元の順を維持する。(安定した並び替え)
https://lodash.com/docs/4.17.15#sortBy

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 34 }
];
 
_.sortBy(users, [function(o) { return o.user; }]);
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
 
_.sortBy(users, ['user', 'age']);
// => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
このスクラップは2023/02/04にクローズされました