国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 21:57:35
文檔

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

JS解惑之Object中的key是有序的么:當我們使用for/in遍歷一個Object對象的時候,打印的結果是否按key的順序打印出來呢? 答案是:不一定。 背景 最近在做一個項目的時候,遇到這樣一個需求: 一個下拉列表中有3個固定選項,包括:-1:全部;0:正常;1:失效。 于是,我就定義了一個對象
推薦度:
導讀JS解惑之Object中的key是有序的么:當我們使用for/in遍歷一個Object對象的時候,打印的結果是否按key的順序打印出來呢? 答案是:不一定。 背景 最近在做一個項目的時候,遇到這樣一個需求: 一個下拉列表中有3個固定選項,包括:-1:全部;0:正常;1:失效。 于是,我就定義了一個對象

當我們使用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

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

JS解惑之Object中的key是有序的么:當我們使用for/in遍歷一個Object對象的時候,打印的結果是否按key的順序打印出來呢? 答案是:不一定。 背景 最近在做一個項目的時候,遇到這樣一個需求: 一個下拉列表中有3個固定選項,包括:-1:全部;0:正常;1:失效。 于是,我就定義了一個對象
推薦度:
標簽: js 序的 key
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国内精品伊人久久大香线焦 | 欧美日韩极品 | 亚洲欧美国产精品 | 国产99视频精品草莓免视看 | 人禽性动交异族另类 | 天堂va欧美ⅴa亚洲va一国产 | 国内一级野外a一级毛片 | 久久午夜一区二区 | 国产精品成人一区二区三区 | 国产精品va在线观看一 | 亚洲一区二区三区中文字幕 | 国产精品va在线观看无 | 日韩视频中文字幕专区 | 欧美亚洲综合视频 | 亚洲四色 | 色网电影| 亚洲欧美在线免费观看 | 国产精品一区视频 | 亚洲成人免费 | 国产1区2区 | 国产美女一级特黄毛片 | 精品视频一区二区三区四区五区 | 国产一在线 | 91久娇草 | 日韩国产综合 | 亚洲 欧美 日韩在线 | 国产成人精品一区二三区2022 | 亚洲欧美视频一区 | 在线观看网站国产 | 国产视频播放 | 国产免费精彩视频 | 亚洲啪啪网址 | 欧美日韩免费一区二区三区 | 日韩精品在线免费观看 | 免费精品国产 | a在线视频 | 成人免费久久精品国产片久久影院 | 成人一区二区免费中文字幕 | 图片区 日韩 欧美 亚洲 | 久久精品国产亚洲aa | 午夜在线观看免费视频 |