iT邦幫忙

第 11 屆 iThome 鐵人賽

2
自我挑戰組

新手初探 Vue系列 第 25

鐵人賽Day26 - ES6 之字串模板 Template String

  • 分享至 

  • xImage
  •  

在以往我們在字串的組合上會比較冗長,如下:

const people = [
  {
    name: '小明',
    friends: 2
  },
  {
    name: '阿姨',
    friends: 999
  },
  {
    name: '杰倫',
    friends: 0
  }
]
let originString = '我叫做 ' + people[0].name;
let originUl = '<ul>\
  <li>我叫做 ' + people[0].name + '</li>\
  <li>我叫做 ' + people[1].name + '</li>\
  <li>我叫做 ' + people[2].name + '</li>\
</ul>';

ES6 的字串組合上方便許多,像是上面的 originString 把它改寫一下:

let newString = `我叫做 ${ people[0].name }`

輸出結果會是一樣的,主要是 反引號,以及 $ 搭配 {} 的使用方式,{} 內放置變數即可

在搭配標籤的組合上也可以改寫成:

let newUl = `
    <ul>
        <li>我叫做 ${people[0].name} </li>
        <li>我叫做 ${people[1].name} </li>
        <li>我叫做 ${people[2].name} </li>
    </ul>
`

{} 內不只可以放置變數,也可以放置 JS 語法,我們在把上面的標籤組合改寫一下:

newUl = `
    <ul>
        ${people.map((person) => { return `<li>我叫做 ${person.name}</li>` })}
    </ul>
`

我們在 ul 底下寫了一個 .map() 的方法,用迴圈的方式 return 每個 li

這裡補充一下 .map() 這個方法以及 .forEach() 有什麼差別,首先我們先宣告一個陣列:

let fruits = ['apple', 'banana', 'strawberry'];

接著我們用 各別使用 .map().forEach() :

fruits.map(function(item){
    console.log('map', item);
});
// map apple
// map banana
// map strawberry
// [undefined, undefined, undefined]

fruits.forEach(function(item){
    console.log('for', item);
});
// for apple
// for banana
// for strawberry
// undefined

一樣都可以用迴圈的型式讀取到每筆資料,但最後的 undefined 的資料狀態不一樣,.map() 是陣列型式
那兩者的區別在哪呢?
.map() 的使用上可以類似加工的概念再 return 回去,而 .forEach() 卻不能
我們在針對 .map() 的使用進一步的寫下去:

var newFruits = fruits.map(function(item){
    return 'new ' + item;
});

console.log(newFruits);
// ['new apple', 'nwe banana', 'new strawberry']

就會發現它可以新宣告的變數會變成陣列,並把加工 return 回來的值塞進去
如果用 .forEach() 是無法做到這樣的
如果要在 .forEach() 做到一樣的效果,要再新宣告一個變數為空陣列:

let copy = [];

fruits.forEach(function(item){
    copy.push('new ' + item);
});

console.log(copy);
// ['new apple', 'nwe banana', 'new strawberry']

上面就是 .map().forEach() 的差別


上一篇
鐵人賽Day25 - ES6 之箭頭函式
下一篇
鐵人賽Day27 - 常用的陣列方法
系列文
新手初探 Vue30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言