亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

javascript - js如何實(shí)現(xiàn)這種操作,get(obj,’k1’,’k2’,’k3’).then((v)=>console.log(v))

瀏覽:105日期:2023-06-01 17:34:32

問題描述

類似下面這種代碼

get(obj,’k1’,’k2’,’k3’) .then((v)=>console.log(v)) .else(()=>console.log(’值為空’));

實(shí)現(xiàn)下面這種代碼的功能

if(obj && obj.k1 && obj.k1.k2 && obj.k1.k2.k3){ console.log(obj.k1.k2.k3);}else{ console.log(’值為空’)}

問題解答

回答1:

采用es6+promise實(shí)現(xiàn)方式

// 功能實(shí)現(xiàn)function get(obj, ...props) { // 檢查該對象是否擁有某個(gè)屬性 function hasProp(obj, prop) { return !!obj[prop] } return new Promise(function(resolve, reject) { let tempObj = {...obj} for (let i = 0; i < props.length; i++) { // 如果找到該屬性,將該屬性存儲(chǔ)起來繼續(xù)尋找下一個(gè)屬性,直到循環(huán)結(jié)束 if (hasProp(tempObj, props[i])) {tempObj = tempObj[props[i]] } else { // 找不到則返回錯(cuò)誤信息return reject(’找不到’ + props[i] + ’屬性’) } } return resolve(tempObj) })}// 使用let obj = { user: { name: ’anguer’ }}get(obj, ’user’, ’name’).then(function(res) { console.log(res) // print ’anguer’}).catch(function(err) { console.log(err)})回答2:

這樣行不行

function get (obj) { var scope = { obj: obj } var path = ’scope.obj.’ + Array.prototype.slice.call(arguments, 1).join(’.’) var value = null var NONE = ’值為空’ try {value = (new Function(’scope’, ’return ’ + path + ’;’))(scope)if (value === null || value === undefined) { return NONE } else { return value} } catch (e) {return NONE }}var obj = { k1: { k2: { k3: 1}}}get(obj, ’k1’, ’k2’, ’k3’) // 1get(obj, ’k1’, ’k’, ’k3’) // 值為空回答3:

class Tang { constructor() { this.obj = null; this.keys = []; this.thenF = []; this.elseF = []; } then(fn) { this.thenF.push(fn); return this; } _init() { let [obj, ...keys] = arguments; this.obj = obj; this.keys = keys; setTimeout(() => this._start(), 0) return this; } _start() { while(this.keys.length && this.obj) { this.obj = this.obj[this.keys.shift()]; } if (!this.keys.length) { this.thenF.forEach(fn => fn(this.obj)); } else { this.elseF.forEach(fn => fn()); } } else(fn) { this.elseF.push(fn); return this; }}let obj = {k1:{k2:{k3:1}}};let tang = new Tang();let get = tang._init.bind(tang);get(obj,’k1’,’k2’,’k3’) .then((v)=>console.log(v)) .else(()=>console.log(’值為空’));

看到鏈?zhǔn)秸{(diào)用我就想到了之前的lazyman。實(shí)現(xiàn)的比較丑陋。。。

回答4:

參考一下

function get (obj, ...keys) { try { let value = keys.reduce((o, k) => o[k], obj) return { then (cb) {if (typeof cb === ’function’) { cb(value) }return {else () {}} } } } catch (e) { return { then () {return { else (cb) { if (typeof cb === ’function’) { cb(e) } }} } } }}

標(biāo)簽: JavaScript
主站蜘蛛池模板: 在线精品国内视频秒播 | a一级黄| 国产精品亚洲第一区在线28石 | 不卡精品国产_亚洲人成在线 | 国产精品视频无圣光一区 | 精品国产精品久久一区免费式 | 久久99国产一区二区三区 | 九九热视频精品在线观看 | 99视频在线看观免费 | 黑人巨茎xxx免费视频 | 91久久青草精品38国产 | 亚洲视频三级 | 亚洲欧美久久一区二区 | 久热re这里只有精品视频 | 九九热精品视频在线播放 | 综合欧美日韩一区二区三区 | 久久99热精品免费观看无卡顿 | xxx性欧美人 | 欧美日本在线播放 | 美女久久久 | 国产又黄又爽又色视频观看免费 | 欧美成人一区二区三区不卡 | 91香蕉视频在线看 | 91精品综合久久久久m3u8 | 成人小视频在线免费观看 | 成人啪精品视频免费网站 | 日本黄色片免费观看 | 麻豆一区二区免费播放网站 | 欧美精品成人一区二区视频一 | 久久精品国产999久久久 | 午夜精品久久久久久久第一页 | 国产精品日本不卡一区二区 | 亚洲一级黄色 | 国产精品一区二区三区四区五区 | 国产丝袜视频在线 | 国产精品成人第一区 | 伊人久久中文字幕久久cm | 亚洲一区二区三区四区视频 | 中国精品久久 | 国产成人深夜福利短视频99 | 亚洲一级在线 |