注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

行と列スキーマ間の変換

JavaScriptで解決策を実装する方法は数え切れないほどあります。これらの例は、Slate アプリケーションで見られる一般的なパターンのための汎用アルゴリズムを強調しています。これらの解決策の多くは、組み込みの LodashMoment JavaScript ライブラリを使用しています。

行を列に変換する

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 /** * 行指向のスキーマを列指向のスキーマに変換します(クエリで返される形式)。 * 注:配列の最初のオブジェクトには、抽出されるすべてのキー(将来の列)を含める必要があります。 * 最初のオブジェクトがすべてのキーのスーパーセットを含まない場合は、関数内の代替のコメントアウトされたコードを使用できます。 * * 変換前: * [ * { foo : 1, bar : 4, baz : 7 }, * { bar : 5, baz : 8, foo : 2 }, * { foo : 3, baz : 9, bar : 6 } * ] * * 変換後: * { * foo : [1, 2, 3], * bar : [4, 5, 6], * baz : [7, 8, 9] * } * */ function transformRowSchemaToColumnSchema(arr, first_object_has_all_keys=true) { if (_.isEmpty(arr)) { return []; } var orderedKeys; if(first_object_has_all_keys){ // 最初のオブジェクトがすべてのキーを持っている場合 orderedKeys = _.chain(arr) .first() .keys() .sortBy() .value(); } else { // 全てのオブジェクトが全てのキーを持っていない場合の代替方法: orderedKeys = _.uniq(_.flatMap(arr, _.keys)) } // キーをソートする関数 var sortKeysBy = function(obj) { return _.zipObject(orderedKeys, _.map(orderedKeys, function(key) { return obj[key]; })); }; // インデックスとキーのマッピング var indexToKeyMapping = _.reduce(orderedKeys, function(agg, key, i) { agg[i] = key; return agg; }, {}); var arrayOfRowObjects = _.map(arr, sortKeysBy); var arrayOfRowArrays = _.map(arrayOfRowObjects, function(obj) { return _.values(obj) }); var arrayOfColumnArrays = _.unzip(arrayOfRowArrays); var objectOfColumnArrays = _.reduce(arrayOfColumnArrays, function(agg, columnArr, i) { var key = indexToKeyMapping[i]; agg[key] = columnArr; return agg; }, {}); return objectOfColumnArrays; } var data = {{f_data}} return transformRowSchemaToColumnSchema(data)

行を列へ変換する

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 /** * カラム指向のスキーマ(クエリの結果として返されるもの)を、行指向のスキーマに変換する({{#each}}ループで使用するためによく使われる) * * 変換前: * { * foo : [1, 2, 3], * bar : [4, 5, 6], * baz : [7, 8, 9] * } * * 変換後: * [ * { foo : 1, bar : 4, baz : 7 }, * { foo : 2, bar : 5, baz : 8 }, * { foo : 3, bar : 6, baz : 9 } * ] */ function transformColumnSchemaToRowSchema(data) { var keys = _.keys(data); var arrays = _.values(data); // もし`data`がSQLクエリから直接来る場合は、`._response`プロパティを削除する // delete data._response; var arrayOfPropertyLists = _.zip.apply(_, arrays); var arrayOfObjects = _.map(arrayOfPropertyLists, function(list) { var obj = {}; _.each(keys, function(key, i) { obj[key] = list[i]; }); return obj; }); return arrayOfObjects; } var data = {{f_data}} return transformColumnSchemaToRowSchema(data)