JavaScript 連想配列(オブジェクト)の結合 コード例

JavaScript Object.assign() コード例

JavaScript で、 複数の 連想配列(オブジェクト)型の 変数を 結合させるにはassign()を使います。

下記は Object.assign()を使ったコード例です。

let obj1 = {Name: "アレギウム", Age: 20}
let obj2 = {FirstName: "マヌエル", ID: 100}
Object.assign(obj1,obj2)
console.log(obj1)

実行すると 下のように obj1とobj2の 内容が結合されます。

Object.assign()実行結果

変数に同じキーが入っている場合は、 assign()の2番目の引数の値が使われるようでした。

assign(target, source)になっていて

@param target コピー先のターゲットオブジェクト。
@param source コピー元のソースオブジェクト。
let obj1 = {Name: "アレギウム", Age: 20}
let obj2 = {FirstName: "マヌエル", ID: 100}
let obj3 = {Address: "日本"}
Object.assign(obj1,obj2,obj3,obj3,obj3,obj3,obj3)
console.log(obj1)

引数内に変数は何個渡しても大丈夫です。

JavaScript 配列 連結 プログラム例

JavaScript や Node.js で、 2つ以上の配列(Array)型変数を 連結させたい場合の コード例

JavaScriptNode.js で、 2つ以上の配列(Array)型変数を 連結させたい場合の コード例です。

let array1 = [1,2,3]
let array2 = ["あ","い","う"]
let allArray = array1.concat(array2)
console.log(allArray)

concat()を 使って array1と array2を 結合させた結果を 変数allArrayに 入れています。

concat()を 使って array1と array2を 結合させた結果

この concat()の引数は複数の配列を入れることも可能です。

let array1 = [1,2,3]
let array2 = ["あ","い","う"]
let array3 = [4,5,6]
let allArray = array1.concat(array2,array3)
console.log(allArray)

Node.js DynamoDB 全レコード Scan コード例

Node.js DynamoDB 全レコード Scan コード例

Node.jsを使って、 AWSDynamoDB テーブル内をスキャンする

予め、 npm init を完了させて 下↓のコマンドで aws-sdk を インストールしておきます。

npm install aws-sdk

下のコードは シンプルな Scan コード例です

const aws = require('aws-sdk');
const tableName = "テーブル名"
let dynamoDB = new aws.DynamoDB.DocumentClient({
    region: 'ap-northeast-1'
})
let DynamoDBScanAll = async () => {
    return await dynamoDB.scan({TableName: tableName}).promise()
}

Promise.all([DynamoDBScanAll()]).then((threadList) => {
    threadList.forEach(scanAllRes => {
        let res = JSON.stringify(scanAllRes.Items)
        console.log(res)
    })
})

上記コードの場合 「1 回の Scan リクエストで、最大 1 MB のデータを取得」 なので 全件数を 取得できません。

テーブル内の全レコード Scan する場合の コード例

下↓の コード例は、 LastEvaluatedKey == nullになるまで ループし スキャンを続けます。

const aws = require('aws-sdk');
const tableName = "テーブル名"
let dynamoDB = new aws.DynamoDB.DocumentClient({
    region: 'ap-southeast-2'
})
let DynamoDBScanAll = async () => {
    let ScanAll = []
    let LastEvaluatedKey = null;
    let loop = true
    try{
        while(loop){ //ループ開始
            let scanRes = {};
            let param = {TableName: tableName, ExclusiveStartKey: LastEvaluatedKey};
            scanRes = await dynamoDB.scan(param).promise() //スキャン実行
            ScanAll = ScanAll.concat(scanRes.Items) //配列結合
            LastEvaluatedKey =  (scanRes['LastEvaluatedKey'] != null) ? scanRes['LastEvaluatedKey'] : null
            if (LastEvaluatedKey == null) //LastEvaluatedKeyがnullならループ終了
                loop = false
            else
                console.log(JSON.stringify(LastEvaluatedKey))
        }
    
    } catch(e){
        console.log(e)
    }
    return ScanAll
}

Promise.all([DynamoDBScanAll()]).then((threadList) => {
    threadList.forEach(scanAllRes => {
        let res = JSON.stringify(scanAllRes)
        console.log(res)
    })
})

2回目以降のスキャンは、 scanパラメータに ExclusiveStartKeyを含め処理します。