24 มกราคม, 2557

[แปล] การเรียนปริญญาเอกคืออะไร? เปรียบเทียบง่ายๆ ด้วยวงกลมหนึ่งวง


บทความต้นฉบับ แปลและเรียบเรียงใหม่จาก credit:  The Illustrated-guide to a Ph.D

ไปเจอบทความมา ส่วนตัวอ่านแล้วคิดว่าเขาเปรียบเทียบได้ค่อนข้างดี
ประเด็นที่เขาเปิดคือ
การเรียนปริญญาเอกคืออะไร?
เริ่มต้น เราสมมุติวงกลมวงหนึ่ง แทนความรู้ทุกอย่างที่คนเคยศึกษามา ... เราเกิดมาปุ๊บก็จะเริ่มตรงกลางกระดานพอดี

"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 เข้าช่วย