24 มกราคม, 2557

"Merge" และ "Intersect" ใน JavaScript ทำยังไง?

ช่วงนี้เขียน JavaScript ในส่วนที่ทำงานกับ Array และ Object บ่อย

หนึ่งใน action ที่ทำบ่อยมากคือ การผสาน (merge) Object หนึ่งตัว (หรือมากกว่า) และ การเลือกซ้ำ (intersect) Array สองตัวเข้าด้วยกัน
function mergeObj(){
    var r = { };
    for( var i in arguments ){
        for( var j in arguments[i] ){
            r[j] = arguments[i][j];
        }
    }
    return r;
}

var a = {x:1, y:2, z:3};

var b = {q:10, w:20, e: 30, x:40};

var result = mergeObj(a,b);

//result is {x:40, y:2, z:3, q:10, w:20, e:30}
       
สำหรับ mergeObj นั้นสามารถส่ง Object เป็น parameter เข้าไปกี่ตัวก็ได้เพราะรับค่าด้วยตัวแปร arguments
function intersect( arr1, arr2 ){
    if( arr1 instanceof Array && arr2 instanceof Array ){

        //make arr1 smaller than arr2
        if( arr1.length > arr2.length ){
            var tmp = arr1;
            arr1 = arr2;
            arr2 = tmp;
        }

        return arr1.filter(function( n ){
            return arr2.indexOf(n) !== -1;
        });
    }
    return [ ];
}


var a = [1,2,3,4,5,6,7,8,9,10];

var b = [2,4,6,8,10,12,14,16];

var result = intersect(a,b);

//result is [2,4,6,8,10]
 ส่วน intersect จะใช้กับ Array โดยใช้คุณสมบัติของ .filter เข้าช่วย

ไม่มีความคิดเห็น:

แสดงความคิดเห็น