iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1
自我挑戰組

圖解Javascript面試題目30天系列 第 9

Day 09 JavaScript之——你有聽過「物件」嗎? (2) Intro-2

{}

今天想保持沈默,所以開頭以一個空的物件代替(´・ω・`)

昨天介紹到了建立物件的方法,那如果我想要讀取或者修改它,應該怎麼做呢?
在開始說明之前,要先釐清一下物件的組成:

const leo = { 
  name: “Leo”, 
  breed: "Ragdoll", 
  fur_color: "pointed" 
}

大家可能或多或少會聽過:鍵(key)值(value)等名稱。在JavaScript中,屬性(property)這個詞,就是來代表物件中的鍵值對。以上面的例子為例,你可以說這個物件有三個屬性,而第二個屬性的名稱(或者鍵)為breed,對應到的值是"Ragdoll"
的使用上是有一點限制的:必須為符號或者字串,即使在設定時使用數字,仍是會被強制轉為字串。而可以是任何JavaScript中的型態。

有另外一個和物件很像的,叫map,它的key就可以是任意型態喔~

如下範例,物件中屬性的值可以是任何型態:

const maru = {
  name: "Maru",
  age: 1,
  isFixed: true,
  friends: [leo, sora],
  appearance : {
    fur_color: 'tortoiseshell',
    eye_color: 'golden',
    coat: 'longhair'
  }
}

對物件存取:

為什麼要將資料存在物件裡?當然就是希望能方便且有結構性的取出來用呀?
以下將說明幾種常用的存取方法:

1. 用屬性存取( . 點它)

當屬性名稱包含非英文字母數字$_,或者為數字開頭時,就只能用第2種方法取

console.log(maru.age) // 1
maru.age = 2

console.log(maru.age) // 2

2. 用鍵存取( [] 框它)

記得要將鍵用'' 或 ""包成字串喔

console.log(maru['name']) // "Maru"

對物件列舉:

善用物件列舉的方法,可以讓你在前端印資料有如神助~

1. Object.keys

功能如其名,就是取得一個物件的所有鍵。值得注意的是,這邊只會列舉可列舉(enumerable)的屬性名稱而已(預設為可列舉)。而此功能的回傳值,是將這些屬性名稱放進陣列之中回傳。

console.log(Object.keys(maru))
// ["name", "age", "isFixed", "friends", "appearance"]

2. Object.values

功能如其名,就是取得一個物件的所有值。而此功能的回傳值,也是將這些值放進陣列之中回傳。

console.log(Object.values(maru))

兩者搭配,加上陣列功能,試著對api回傳值做操作

假設我打了一個有關貓的資料的api,得到以下回傳值

const catList = [
  {
    name: "Leo",
    age: 1,
    isFixed: true,
    friends: ['Maru', 'Sora'],
    appearance : {
      fur_color: 'seal point',
      eye_color: 'light blue',
      coat: 'longhair'
    }
  },
  {
    name: "Maru",
    age: 1,
    isFixed: true,
    friends: ['Leo', 'Sora'],
    appearance : {
      fur_color: 'tortoiseshell',
      eye_color: 'golden',
      coat: 'longhair'
    }
  },
  {
    name: "Sora",
    age: 0.5,
    isFixed: false,
    friends: ['Leo', 'Maru'],
    appearance : {
      fur_color: 'orange',
      eye_color: 'green',
      coat: 'shorthair'
    }
  }
]

題目1:列舉name

const names = catList.map( cat => Object.values(cat)[0] )
console.log(names) // ["Leo", "Maru", "Sora"]

題目2:列舉coat

const coatValues = catList.map( cat => cat.appearance.coat )
console.log(coatValues) // ["longhair", "longhair", "shorthair"]

那麼關於物件的基本介紹就到這邊囉!
明天終於要進到看面試題目的階段囉~~


後記:

悲劇了(((゚Д゚;))),因為最近幾乎一天只睡4小時,剛剛發到一半直接睡著就超過12點_(:з」∠)_
我對不起我的隊友...害大家無法完成團隊挑戰(跪)

雖然已經跟完賽無緣,但自己挖的坑還是要完成!!
只能記取教訓,明年來雪恥時記得設鬧鐘,以及不要拖到晚上才發文
接下來還是會按照原本的預定持續發文喔,請大家多多指教了・゜・(PД`q。)・゜・


上一篇
Day 08 JavaScript之——你有聽過「物件」嗎? (1) Intro
系列文
圖解Javascript面試題目30天9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言