Làm web (js06) - JS: DOM

Bài trước: Làm web (js05) - JS: Objects
----------

6 DOM


The Document Object Model (DOM) allows you to access elements of a web page and enable interaction with the page by adding and removing elements, changing the order, content and attributes of elements, and even altering how they are styled.
In this chapter, we’ll cover the following topics:

– Introduction to the DOM

– Getting elements: getElementById, getElementsByClassName, getElementsByTagName, querySelector and querySelectorAll

– Navigating the DOM

– Getting and settings an element’s attributes

– Updating the DOM by creating dynamic markup

– Changing the CSS of an element

– Our project: we’ll dynamically insert each question into the HTML

6.1 The Document Object Model


What is DOM?

The Document Object Model, or DOM for short, represents an HTML document as a network of connected nodes that form a tree-like structure.

The DOM treats everything on a web page as a node. HTML tags, the text inside these tags, even the attributes of a tag are all nodes. The HTML tag is the root node, and every other part of the document is a child node of this.

History of the DOM (p218)

6.2 Getting elements (p221)


6.3 Setting an element’s attributes (p233)


6.4 Creating dynamic markup (p237)


-----
Cập nhật: 15/12/2019
-----
Xem thêm: Làm web (js07) - JS: Event
Xem thêm: Danh sách bài học

Học làm web (58_1) - Mini project HTML CSS

Tiếp theo của: Học làm web (58) - CSS căn bản (34)
----
Mini project (hosting, domain, git, HTML, CSS)

1) Tạo tài khoản trên hệ thống remote git bất kì (github, gitlab)

2) Tạo mỗi kho chứa cho mỗi dự án nhỏ, làm được dự án nào thì push code lên remote git

3) Tạo một hosting trên internet, tạo một trang index.html, trên đó có chứa link tới từng dự án của cá nhân

4) Mini project 1. Làm theo clip để tạo ra một số website hoàn chỉnh, học thêm về bố cục (layout) của một trang web.


5) Mini project 2. Làm theo clip để tạo một website hoàn chỉnh, đơn giản


6) Xem một số nguyên tắc khi viết mã HTML, CSS


7) Sử dụng Sublime Text hiệu quả


8) Sử dụng VS Code hiệu quả


9) Mini project 3. CSS3, Layout, Flex, Responsive, Mobile First

Xem và làm theo.

https://www.youtube.com/watch?v=8gNrZ4lAnAw

Hình ảnh và mã nguồn tham khảo: https://drive.google.com/open?id=17h5l4sLiKciOQr3afqr-Fn5rBfTULBuk

Một số ý lượm được từ clip trên:

– Để làm Front-end cần học HTML, CSS, JavaScript.

– Hai code editor được nhiều người đang sử dụng là VC code và Sublime Text.

– Khai báo class và id trong HTML để CSS và JavaScript sử dụng sau này

– HTML validation

– w3schools.com là một trong những website tin cậy để tham chiếu

– Đơn vị đo tương đối (relative) và tuyệt đối (absolute) trong CSS

– CSS functions, ví dụ: background-color: rgba(0,0,0,0.4)

– CSS media queries giúp thực hiện responsive giao diện

– Học một số lệnh cd, mkdir

– Sử dụng Live server trong VS code để tự động cập nhật kết quả trên trang web khi lập trình HTML, CSS

– Cách tổ chức bố cục (layout) của một trang web

– Để ý tính ngữ nghĩa khi dùng các phần tử HTML

– Mobile first trong HTML và CSS

– Sử dụng flex

– Tạo đường xiên của một hình bằng transform: skewY()

– Cách tạo góc nhọn của một hình bằng phần tử pseudo, ví dụ: container:before

– Responsive

10) Mini project 4. Tự làm theo mẫu có sẵn:



Hướng dẫn, gợi ý:

– Xem bố cục trang web gồm mấy vùng, tên mỗi vùng, cấu trúc cha-con

Đăt outline cho phần tử body để thấy được bố cục trên trang mẫu, thấy được quan hệ phân cấp của các phần tử

– Viết HTML, và CSS cho từng vùng

Do tính chất kế thừa của CSS, nên sẽ thực hiện CSS cho các phần tử cha trước sau đó đến các phần tử con.

Một bố cục tham khảo:

<body>
    <section id="page">
        <div id="main">
            <header id="header">
                <div class="header_top"></div>
                <div class="header_mid"></div>
                <div class="header_bot"></div>
            </header>
            <section id="middle"></section>
        </div>
        <footer id="footer"></footer>
    </section>
</body>

– fontello:


-----------
Cập nhật [09/12/2019]
-----------
Xem thêm: Tổng hợp các bài viết về Học làm web
Xem thêm: Học làm web (59) - JS căn bản (1)

DevOps (1) - Tổng quan


1         DevOps là gì


1.1       Vòng đời phát triển hệ thống


Theo wiki, Vòng đời phát triển hệ thống (tiếng Anh: Systems Development Life Cycle, viết tắt: SDLC), hay còn được gọi là Vòng đời phát triển ứng dụng (tiếng Anh: Application Development Life Cycle), là một thuật ngữ được dùng trong Công nghệ hệ thống, Hệ thống thông tin và Công nghệ phần mềm nhằm mô tả quá trình lập kế hoạch, tạo ra, kiểm thử và triển khai một hệ thống thông tin.
Tùy thuộc vào mô hình phát triển hệ thống/phần mềm khác nhau, SDLC sẽ được chia thành các giai đoạn khác nhau. Ví dụ một số mô hình phát triển hệ thống phổ biến: mô hình thác nước (water fall), mô hình chữ V (V model), mô hình xoắn ốc (spiral model), mô hình Agile/Scrum (agile/scrum model).


1.2       Mô hình thác nước


Thông thường, SDLC theo mô hình thác nước sẽ gồm các pha (stage) sau:

– Phân tích/đặc tả yêu cầu

– Thiết kế

– Lập trình

– Kiểm thử

– Triển khai và bảo trì

Xem hình minh họa,



Ưu điểm của mô hình thác nước:

– Đơn giản, dễ sử dụng

– Dễ quản lý nhờ vào tính cố định của mô hình

– Nhờ việc kiểm duyệt tại mỗi pha nên khả năng xảy ra lỗi ít

– Mỗi thời điểm chỉ thực hiện một pha, nên không có hiện tượng chồng chéo trong công việc

– Thích hợp cho các dự án nhỏ

Nhược điểm của mô hình thác nước:

– Không chấp nhận việc thay đổi các yêu cầu của dự án

– Khó quay lại bước trước, nếu các bước sau phát hiện có vấn đề cần điều chỉnh

– Quy trình làm việc nhiều rủi ro vì ít có thông tin phản hồi giữa các pha

– Không có sản phẩm phần mềm được chuyển giao cho tới thời điểm cuối của dự án

– Không thích hợp cho các dự án lớn và phức tạp, vì tính rủi ro cao của mô hình


1.3       Mô hình Agile


Mô hình Agile được đưa ra để khắc phục một số nhược điểm của mô hình thác nước. Trong mô hình Agile/Scrum, mỗi chu kì làm việc (sprint) cũng tiếp cận theo các bước gần giống với mô hình thác nước. Tuy nhiên, Agile tiếp cận theo phương pháp lặp, thường xuyên chuyển giao kết quả và nhận phản hồi của các bên liên quan để điều chỉnh một cách linh hoạt.

Xem hình minh họa,


 
Ưu điểm:

– Nhanh chóng và liên tục chuyển giao từng phần của phần mềm cho khách hàng

– Tính tương tác trong đội dự án, giữa đội dự án và khách hàng được thực hiện thường xuyên, điều này giúp thông tin được minh bạch, hạn chế tình trạng hiểu sai yêu cầu công việc

– Tính thích nghi cao với các thay đổi

– Chấp nhận thay đổi yêu cầu trong suốt quá trình thực hiện dự án

– Phù hợp với các dự án có tính sáng tạo, tính khả mở cao

Nhược điểm:

– Ít tính dự báo, dự đoán

– Dự án gặp rủi ro nếu khách hàng không hiểu rõ về sản phầm mong muốn, hoặc khách hàng không hợp tác tốt trong quá trình thực hiện dự án

– Tài liệu, thiết kế của dự án ít được chú trọng

– Khó xác định được như thế nào gọi là hoàn thành chức năng/dự án

– Tốn nhiều thời gian cho quá trình trao đổi giữa các thành viên trong đội dự án, giữa đội dự án và khách hàng


1.4       Khái niệm DevOps


Mô hình Agile đã khắc phục được một số hạn chế của mô hình thác nước, giúp gắn kết khách hàng và nhóm phát triển dự án.

Tuy nhiên trong mô hình Agile, vẫn có những khó khăn trong việc kết hợp giữa nhóm phát triển dự án và nhóm triển khai/vận hành. DevOps ra đời sẽ khắc phục được vấn đề này.

Theo wiki, DevOps (kết hợp của cụm từ tiếng Anh "software DEVelopment" và "information technology OPerationS") là một thuật ngữ để chỉ một tập hợp các hành động trong đó nhấn mạnh sự hợp tác và trao đổi thông tin của các lập trình viên và chuyên viên tin học (nhóm triển khai/vận hành) khi cùng làm việc để tự động hóa quá trình chuyển giao sản phẩm phần mềm. Nhằm giúp quá trình biên dịch phần mềm (build), kiểm tra, và phát hành phần mềm diễn ra nhanh chóng, thường xuyên, và đáng tin cậy hơn.

DevOps là một phương thức vận hành mới, giúp quá trình trao đổi và làm việc giữa các phòng: Phát triển phần mềm, Quản lý chất lượng phần mềm (QA), và phòng IT diễn ra thuận lợi; bằng cách “nhúng” một chuyên viên phòng IT vào nhóm phát triển phần mềm tạo thành một đội đa chức năng.

Xem hình minh họa,



Ở hình trên, DevOps sẽ kết nối ba phòng: Phát triển phần mềm (Development/Software engineering), Quản lý chất lượng phần mềm (QA/Quality assurance) và IT (Information technology/Operations). Phòng IT ở đây có nhiệm vụ: phát hành, triển khai, vận hành và giám sát hệ thống/phần mềm.

So sách sự khác nhau giữa phương pháp Agile và DevOps

Phương pháp Agile
DevOps
Tập trung chủ yếu vào tính cộng tác, phản hồi của khách hàng và các thay đổi nhanh gọn
Gắn nhóm phát triển và nhóm vận hành lại với nhau
Không chú trọng vào quá trình “tự động hóa” (automation)
Mục đích chủ yếu là tự động hóa để tăng hiệu quả trong quá trình tạo ra phần mềm
Tập trung nhiều vào giai đoạn phát triển phần mềm (development process), ít tập trung vào quá trình kiểm thử và triển khai
Tập trung vào cả quá trình phát triển, kiểm thử và triển khai.
Gắn kết khách hàng và nhà phát triển
Gắn kết nhóm phát triển và nhóm triển khai


1.5       Vòng đời DevOps


Xem hình minh họa về Vòng đời Devops,



Vòng đời DevOps gồm có các bước sau[1]:

– Code: bước đầu tiên của vòng đời là lập trình, các lập trình viên viết mã cho chương trình

– Build: biên dịch và tạo ra một phiên bản của chương trình

– Test: kiểm thử phần mềm một cách tự động bằng các công cụ hỗ trợ (ví dụ Selenium).

– Release: phát hành

– Deploy: triển khai

– Operate: vận hành

– Monitor: giám sát hiệu xuất ứng dụng, phản hồi, trải nghiệm người dùng

– Plan: dựa trên các thông tin thu thập được của quá trình monitor, thực hiện các thay đổi để nâng cao hiệu năng của hệ thống

1.6       Các giai đoạn chính của DevOps


Các bước trong vòng đời của DevOps có thể chia thành các giai đoạn sau:

– Continuous development

– Continuous testing

– Continuous integration

– Continuous deployment

– Continuous monitoring


Xem hình minh họa[1],



-----
Cập nhật: [19/02/2020]
-----
Xem thêm: DevOps (2) -
Xem thêm: Danh sách bài học

Làm web (js05) - JS: Objects

Bài trước: Làm web (js04) - JS: Functions
----------

5         Objects


Everything in JavaScript is either one of the six primitive data types (strings, numbers, booleans, symbols, undefined, and null) or an object. We’ve actually met some objects already, those are arrays and functions. However, they are almost built-in objects. In this chapter we’re going to look at user-defined objects, as well as some of the other built-in objects.

In this chapter, we’ll cover the following topics:

– Object literals

– Adding properties to objects

– Object methods

– JSON

– The Math object

– The Date object

– The RegExp object

– Project: we’ll create quiz and question objects and ask random questions

5.1       Object literals (p167)


An object in JavaScript is a self-contained set of related values and functions. They act as a collection of named properties that map to any JavaScript value such as strings, numbers, booleans, arrays and functions. If a property’s value is a function, it is known as a method.

One way to think about a object is that it’s like a dictionary where you look up a property name and see a value.

Objects are often used to keep any related information and functionality together in the same place.

5.2       Creating objects (p169)


const spiderman = {};

or,

const spiderman = new Object();

Accessing properties (p170)

You can access the properties of an object using the dot notation.

You can also access an object’s properties using bracket notation–the property is represented by a string inside square brackets, so needs to be placed inside single or double quotation marks.

Computed properties (p171)

Example using operator + to concatenate the strings:

const hulk = { name: 'Hulk', ['catch' + 'Phrase']: 'Hulk Smask!' };
console.log(hulk);
//> {name: "Hulk", catchPhrase: "Hulk Smask!"}

Example using ternary operator:

const bewitched = true;
const captainBritain = { name: 'Captain Britain', hero: bewitched ? false : true };
console.log(captainBritain);
//>{name: "Captain Britain", hero: false}

The new Symbol type can also be used as a computed property key:

const name = Symbol('name');
const supergirl = { [name]: 'Supergirl' };
console.log(supergirl);
//> {Symbol(name): "Supergirl"}

A new property can be added to an object using a symbol as a key if the square bracket notation is used:

Calling methods (p172)

To call an object’s method we can also use dot or bracket notation.

Checking if properties or methods exist (p173)

const ob = {
    name: 'Teo',
    weight: 60,
 fly() {
        console.log('fly');
    }
};

console.log('name' in ob);

Another example,

student = {
    name: 'Teo',
    age: 20,
    greeting(){
        alert(`Hi, My name is ${this.ten}.`);
    }
}
console.log('name' in student);
console.log(student.hasOwnProperty('name'));

Finding all the properties of an object (p174)

Adding properties (p176)

Changing properties (p177)

Removing properties (p177)

5.3       Nested objects (p178)


Objects as a parameters to functions (p180)

This (p181)

Namespacing (p182)

5.4       Built-in objects


JSON (p184)

Math (p186)

Date (p196)

Lab 17. As you’ve known, timestamp is a value that represents the number of milliseconds since 01/01/2070. Let’s find the timestamp so that when you run chunk of following code, the result will be 02/01/1970.
const result = new Date(timestamp);
console.log(result.toString());

RegExp (p201)

A regular expression (or RegExp, for short) is a pattern that can be used to search strings for matches to the pattern. A common use is “find and replace” type operations.

Lab 18. Using https://regex101.com/ to learn RegExp.

Creating regular expression (p202)

– Using literal notation of writing the regular expression between forward slashes.

const pattern = /[a-zA-Z] + ing$/;

– Create a new instance of the RegExp object using the new operator and a constructor function

const pattern = new RegExp(‘[a-zA-Z] + ing’);

Regular methods (202)

– Using test() method to see if a string (passed to the method as as parameter) matches the regular expression pattern. It returns true if the pattern is in the string, and false if it isn’t.

Example:

  pattern.test(‘joke’);
<< false
  pattern.test(‘joking’);
<< true
  pattern.test(‘jokingly’);
<< false

Lab 19. Using prompt of JavaScript allowing user input any word, if the word is “stop” then stop program. Using RegExp to write this program.

– The exec() method works in the same way as the test() method, but instead of returning true or false, it returns an array containing the first match found, or null if there aren’t any matches:

Lab 20. Using prompt of JavaScript allowing user input their full name. Using regular expression to check if the first name is “Teo”, stop input processing and convert first name into uppercase. Output full name to console window.

Basic regular expressions (p204)

Character groups (p204)

Regular expression properties (p205)

Special characters (p207)

Modifiers (p207)

Greedy and lazy modifiers (p208)

A practical example (p209)

String methods (p210)


Quiz ninja project (p212)
-----
Cập nhật: 12/11/2019
-----

Hệ điều hành (5) - Quản lý bộ nhớ & bộ nhớ ảo

Bài trước: Hệ điều hành (4) - Liên lạc và đồng bộ hóa giữa các tiến trình
-----

6         Quản lý bộ nhớ


6.1       Các vấn đề phát sinh khi quản lý bộ nhớ


6.1.1       Chuyển đổi địa chỉ tương đối sang tuyệt đối



6.1.2       Không gian địa chỉ ảo và không gian địa chỉ vật lý



6.1.3       Quản lý bộ nhớ đã cấp phát và chưa cấp phát



Các thuật toán chọn vùng trống

– First-fit: chọn đoạn trống đầu tiên đủ lớn

– Best-fit: chọn đoạn trống nhỏ nhất nhưng đủ lớn để thỏa mãn nhu cầu

– Worst-fit : chọn đoạn trống lớn nhất




6.2       Các mô hình cấp phát bộ nhớ


– Mô hình cấp phát liên tục: tiền trình được nạp vào một vùng nhớ liên tục

– Mô hình cấp phát không liên tục: tiến trình được nạp vào một vùng nhớ không liên tục


6.2.1       Mô hình cấp phát liên tục


– Mô hình linker-loader

– Mô hình base & limit


6.2.2       Mô hình cấp phát không liên tục



– Mô hình phân đoạn

(đọc thêm phần cài đặt)

– Mô hình phân trang (paging)


7         Bộ nhớ ảo


7.1       Phân trang theo yêu cầu


7.2       Các thuật toán phân trang


7.3       Thực hành


7.4       Câu hỏi ôn tập



--------
Cập nhật: [05/11/2019]
-------
Danh sách các bài học

Làm web (js04) - JS: Functions

Bài trước: Làm web (js03) - JS: Arrays, Logic and Loops
----------

4         Functions


A function is a chunk of code that can be referenced by a name, and is almost like a small, self-contained mini program. Functions can help reduce repetition and make code easier to follow.

In this chapter, we’ll be covering these topics:

– Defining functions―function declarations, function expressions, Function() constructors and the new arrow syntax

– Invoking a function

– Return values

– Parameters and arguments

– Hoisting―variables and functions

– Callbacks―functions as a parameter

– Project ― we’ll be using functions to make the Quiz Ninja code easier to follow

4.1       Defining a Function (p133)


Function declarations (p133)

function hello(){
console.log('Hello World!');
}

hello();

Lab 8. Write a program using function declaration. Program allows user input a number, then output the sum from 0 to that number.

Function Expression (p134) (anonymous function)

const goodbye = function(){
console.log('Goodbye World!');
};

or,

const goodbye = function bye(){
console.log('Goodbye World!');
};
goodbye();
bye() //error

Lab 9. Write a program using function expression. Program allows user input fullname, then output the fullname as uppercase.

Every function has a name (p135)

Using when debug to know which functions are causing a problem.

console.log(goodbye.name);

Function constructor (p135)

It is not recommended to use this way to declare a function.

4.2       Invoking a function (p136)

4.3       Return Values (p137)

4.4       Parameters and arguments (p138)


Variable numbers of arguments (p140)

Lab 10. Use rest parameter to write the function that allow to get the mean of any set of number.

A sample code:

function mean(...rest){
    let total = 0;
    for(item of rest){
        total += item;
    }
    return total/rest.length;
}
console.log(mean(1,2,1,2,3,4));

Arrow function (p145)

Function hoisting (p147)

Variable hosting (p148)

Variable hoisting can cause quite a bit of confusion and also relies on using var to declare variables. An error will be thrown if you attempt to refer to a variable before it has been declared using const and let. It’s better practice to use const and let to declare any variables at the beginning of a block so hoisting is unnecessary.

4.5       Callbacks (p149)


Remember at the start of this chapter when we said that functions in JavaScript are first-class objects, so they behave in just the same way as every other object? This means that functions can also be given as a parameter to another function. A function that is passed as an argument to another is known as a callback.

Consider a function:

function sing(song) {
console.log(`I'm singing along to ${song}`);
}
sing('Let It Go')
<< 'I'm singing along to Let It Go'

We can make the sing() function more flexible by adding a callback parameter:

function sing(song,callback) {
console.log(`I'm singing along to ${song}.`);
callback();
}

The callback is provided as a parameter, then invoked inside the body of the function.
But what if the function isn’t provided as an argument?

There is nothing to actually define a parameter as a callback, so if a function isn’t provided as an argument, then this code won’t work. It is possible to check if an argument is a function using the following code:

if(typeof(callback) === 'function '){
callback();
}

This will only attempt to invoke the callback if it is a function.

Now we can create another function called dance() that can be used as the callback:

function dance(){
console.log(‘I am moving my body to the groove.’);
}

Now we can call our sing function, but we can also dance as well as sing:

sing(‘Let it go’, dance);

Lab 11. Applying callback function.

As you known, arrays have sort() method to sort all items in array. Try with this array [1,3,12,5,23,18,7].sort();

The result is [1, 12, 18, 23, 3, 5, 7], what is happened? JavaScript has converted numerical array into strings, then placed in alphabetical order.

So, write a function to sort an array based on numerical values:

function numerically(a,b){
    return (a-b)
}

This function can now be used as a callback in the sort() method to sort the array of numbers correctly.

console.log(arr.sort(numerically));
// [1, 3, 5, 7, 12, 18, 23]

Code sample:

const arr = [1,3,12,5,23,18,7];
// console.log(arr.sort());
function numerically(a,b){
    return (a-b)
}
console.log(arr.sort(numerically));

4.6       Array Iterators (p153)


Arrays have a number of methods that utilize callbacks to make them more flexible.

– forEach()

In the last chapter, you can use a for loop to loop through each value in an array like so:

const colors = ['Red', 'Green', 'Blue'];
for(let i = 0; i < colors.length; i++){
    console.log(`Color at position ${i} is ${colors[i]}`);
}

An alternative is to use the forEach() method. This will loop through the array and invoke a callback function using each value as an argument. The callback function takes three parameters, the first represents the value in the array, the second represents the current index and the third represent the array tha the callback is being called on. The example above could be written as:

colors.forEach( (color, index) =>  { console.log(`Color at position ${index} is ${color}`);});

or,

colors.forEach( (color, index) =>  {
    console.log(`Color at position ${index} is ${color}`);
});

or,

colors.forEach( (color, index) =>  console.log(`Color at position ${index} is ${color}`));

– map() (p154)

For example,

console.log([1,2,3].map( square ));
function square (x) {
    return x*x;
}
//> [1, 4, 9]

An anonymous function can also be used as a callback. This example will double all the number in the array:

console.log([1,2,3].map( x => x * 2 ));
//>[2, 4, 6]

or,

console.log([1,2,3].map( (x) => x * 2 ));

or,

console.log([1,2,3].map( (x) => {
    return x * 2;
 }));

The next example takes each item in the array and places them in uppercase inside paragraph HTML tags:

const result = ['red', 'green', 'blue'].map( color => `<p>${color.toUpperCase()}</p>` );
document.write(result);

Notice in this and the previous example, the anonymous function take a parameter, color, which refers to the item in the array. This callback can also take two more parameters–the second parameter refers to the index number in the array and the third refers to the array itself. It’s quite common for callbacks to only used the first, index, parameter, but the next example shows all three parameters being used:

console.log(['red', 'green', 'blue'].map( (color, index, array) => `Element ${index} is ${color}. There are ${array.length} items in total.` ));
//> "Element 0 is red. There are 3 items in total.", "Element 1 is green. There are 3 items in total.", "Element 2 is blue. There are 3 items in total."

Lab 12. Give an array with numerical values, for example [1,2,3,4]. Write a chunk of code to write browser a list as following:

1. Item 1
2. Item 2
3. Item 3
4. Item 4

[Sample]

const so = [1,2,3,4];

document.write("<ol>");
so.map( (x) => document.write(`<li> Mục ${x} </li>`) );
document.write("</ol>");

Lab 13. Given an array with lower characters (for example [le, van, teo]),  Write a chunk of code convert lower characters into upper characters (for example [LE, VAN, TEO]).

[Sample]

const name = ['le','van','teo'];
const result = name.map( (char) => char.toUpperCase());

console.log(result);

– reduce() (p155)

The reduce() method is another method that iterates over each value in the array, but this time it cumulatively combines each result to return just a single value. The callback function is used to describe how to combine each value of the array with the running total. This is often used  to calculate statistics such as averages from data stored in an array. It usually takes two parameters. The first parameter represents the accumulated value of all the calculations so far, and the second parameter represents the current value in the array. The following example shows how to sum an array of numbers:

console.log([1,2,3,4,5].reduce( (acc,val) => acc + val ));
//> 15

The reduce() method also takes a second parameter after the callback, which is the initial value of the accumulator, acc. For example, we could total the numbers in an array, but starting at 10, insteal of zero:

console.log([1,2,3,4,5].reduce( (acc,val) => acc + val, 10 ));
//> 25

Lab 14. Calculating the average word length in a sentence that inputted by user (using prompt to input sentence).

Another example could be to calculate the average word length in a sentence:

const sentence = 'The quick brown for jumped over the lazy dog';

The sentence can be converted into an array using split() method:

const words = sentence.split(' '); // ["The", "quick", "brown", "for", "jumped", "over", "the", "lazy", "dog"]

Now we can use the reduce() function to calculate the total number of letters in the sentence, by starting the count at 0 and adding on the length of each word in each step:

const totalChars = words.reduce( (total, word) => total + word.length,0 );
//>36

And a simple division sum tells us the average word length:

const average = totalChars/words.length;

– filter()

The filter() method returns a new array that only contains items from the original array that return true when passed to the callback.

For example, we can filter an array of numbers to just the even numbers using the following code:

const numbers = [2, 7, 6, 5, 11, 23, 12];
const evens = numbers.filter( x => x % 2 === 0 );
console.log(evens);
// [2, 6, 12]

The filter() method provides a useful way to finding all the truthy values from an array:

const array = [0, 1, '0', false, true, 'hello'];
const result = array.filter(Boolean);
console.log(result);
//> [1, "0", true, "hello"]

To find all the falsy values, the following filter can be used:

const array = [0, 1, '0', false, true, 'hello'];
const result = array.filter( x => !x);
console.log(result);

This uses the not operator, ! to return the complement of a value’s boolean representation. This means that any falsy values will return true and be returned by the filter.

Chaining iterators together (p158)

For example, we can calculate the sum of square numbers using the map() method to square each number in the array and then chain the reduce() method on the end to add the results together:
const result = [1,2,3].map( x => x * x ).reduce( (acc, x) => acc + x );
console.log(result);
//> 14

Improving the mean() function (p159)

Lab 15. Improving the mean() function using a callback. Then:

– Applying to double all the numbers before calculating the mean.

– Applying to square all the numbers before calculating the mean.


Lab 16. Quiz Ninja Project (p161)
-----
Cập nhật: 28/10/2019
-----

Làm web (js03) - JS: Arrays, Logic and Loops

Bài trước: Làm web (js02) - JS: Programming Basics
----------


3         Arrays, Logic, and Loops


In this chapter, we’ll look at some of the data structures used in JavaScript to store lists of values. These are called arrays, sets, and maps. We’ll also look at logical statements that allow us to control the flow of a program, as well as loops that allow us to repeat blocks of code over and over again.

This chapter will cover the following topics:

– Array literals

– Adding and removing values from arrays

– Array methods

– Sets

– Maps

– if and else statements

– switch statements

– while loops

– do … while loops

– for loops

– Iterating over a collection

– Project ― we’ll use arrays, loops and logic to ask multiple questions in our quiz


3.1       Arrays (p89)


3.2       Sets (p103)


Lab 5. Using the prompt to input fullname. Then output characters that used to make the fullname. For example, input: nguyen teo; output: n, g, u, y, e, t, o.

Lab 6. Remove duplicated items in array. For example, inputArray = [1, 2, 4, 5, 1, 3, 5, 6, 7, 3, 5, 4, 7], outputArray = [1, 2, 4, 5, 3, 6, 7]


3.3       Convert Sets to Arrays (p108)


3.4       Maps (p111)


3.5       Convert Maps to Arrays (p115)


3.6       Logic (p115)


3.7       Loops (p119)


3.8       Labs:


Lab 7. Quiz Ninja Project (p128)


-----
Cập nhật: 23/10/2019
-----