91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS解惑之Object中的key是有序的么

發布時間:2020-09-28 12:54:05 來源:腳本之家 閱讀:172 作者:sunmaobin 欄目:web開發

當我們使用for/in遍歷一個Object對象的時候,打印的結果是否按key的順序打印出來呢?

答案是:不一定。

背景

最近在做一個項目的時候,遇到這樣一個需求:

一個下拉列表中有3個固定選項,包括:-1:全部;0:正常;1:失效。

于是,我就定義了一個對象,然后循環這個對象,把結果放到 <option> 上面:

var obj = {
  '-1': '全部',
  '0' : '正常',
  '1' : '失效'
};
<!-- Vue代碼片段 -->
<select>
  <option v-for="(item, key) in obj" :value="key">{{item}}</option>
</select>

<!-- 結果卻是: -->
<!-- 0 正常 -->
<!-- 1 失效 -->
<!-- -1 全部 -->

于是就有了今天這篇文章,且看下文。

解惑

Object的key的排序規則到底是什么樣子的呢?答案是:

如果key是整數(如:123)或者整數類型的字符串(如:“123”),那么會按照從小到大的排序。除此之外,其它數據類型,都安裝對象key的實際創建順序排序。

var obj = {
  '-1': '全部',
  '0' : '正常',
  '1' : '失效'
};
for (let key in obj) {
   console.log(key, obj[key]);
};
// result
// 0 正常
// 1 失效
// -1 全部

另外,如果key中除了整數或者整數類型的字符串外,還含有其它數據類型,則整數放在最前面,比如:

var obj = {
  'a': 111,
  '我' : 222,
  '1' : 333,
  '1.3': 444,
  '3': 555
};
for (let key in obj) {
   console.log(key, obj[key]);
};
// result
// 1 333
// 3 555
// a 111
// 我 222
// 1.3 444

解決

那還是上面的問題,我如何讓對象按key的順序輸出呢?答案是:

將key轉換成非整數類型的字符串,使用的時候再還原。

如果全部是類整數的key,則可以這么做:

// 每個key后面加.轉換成字符串
var obj = {
  '-1.': '全部',
  '0.' : '正常',
  '1.' : '失效'
};
for (let key in obj) {
  // ~~ 表示轉換成整數,這樣上面的key又還原成了-1/0/1
  console.log(~~key, obj[key]);
};
// result
// -1 全部
// 0 正常
// 1 失效

但是,如果key是由各種數據類型混合的,那就不能轉換成整數了,可以這么做:

// 每個key前面加.轉換成字符串
var obj = {
  '.a': 111,
  '.我' : 222,
  '.1' : 333,
  '.1.3': 444,
  '.3': 555
};
for (let key in obj) {
  // 從第1個字符取原始的key
  console.log(key.substring(1), obj[key]);
};
// result
// a 111
// 我 222
// 1 333
// 1.3 444
// 3 555

最后

回歸到我最初遇到的問題,那就這么解決了:

var obj = {
  '-1.': '全部',
  '0.' : '正常',
  '1.' : '失效'
};
<select>
  <option v-for="(item, key) in obj" :value="~~key">{{item}}</option>
</select>

參考

Objects#ordered-like-an-object

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

游戏| 蚌埠市| 高陵县| 廉江市| 绿春县| 东兰县| 闽清县| 瑞安市| 平陆县| 道孚县| 沂水县| 公主岭市| 镇沅| 民权县| 墨脱县| 洪泽县| 鄂伦春自治旗| 恩平市| 迁安市| 钟祥市| 务川| 闻喜县| 黎川县| 项城市| 巫山县| 五峰| 调兵山市| 天长市| 扶余县| 聂荣县| 抚顺县| 乐平市| 庄河市| 霍邱县| 林芝县| 桦南县| 东乌| 株洲市| 满城县| 达孜县| 苏尼特右旗|