亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 Object.keys 與值數組一起使用

將 Object.keys 與值數組一起使用

忽然笑 2023-03-03 14:56:32
給定以下對象var obj = {'low': [1, 2, 3], 'medium': [4, 5, 6], 'high': [7, 8, 9, 10]}是否有可能使用Object.keys(無循環)通過相應值之一獲取鍵(低/中/高)?
查看完整描述

6 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

也許是這樣的:


var obj = {'low': [1, 2, 3], 'medium': [4, 5, 6], 'high': [7, 8, 9, 10]};



function getKey(n) {

  return Object.keys(obj).find(k => obj[k].includes(n));

}


查看完整回答
反對 回復 2023-03-03
?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

如果你真的想避免for loop,你可以改用Array#reduce。


var obj = {'low': [1, 2, 3], 'medium': [4, 5, 6], 'high': [7, 8, 9, 10]};


const fn = (value, arr) => 

   Object.entries(arr)

     .reduce((s, [key, a]) => (a.indexOf(value) > -1 ? key : s), null);


console.log(fn(7, obj));

console.log(fn(1, obj));


查看完整回答
反對 回復 2023-03-03
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

您可以使用Object.keys、Object.values、Array#findIndexArray#some來完成。


var obj = {'low': [1, 2, 3], 'medium': [4, 5, 6], 'high': [7, 8, 9, 10]};


function mySearch(obj,search) {

    return Object.keys(obj)[(Object.values(obj).findIndex(el => el.some(val => val===search)))];

}


console.log(mySearch(obj, 5));

console.log(mySearch(obj, 8));


查看完整回答
反對 回復 2023-03-03
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

您正在尋找與基本對象不同的數據結構。看看雙向地圖。這是一種數據結構,允許您通過鍵查找值,并通過值查找鍵。

我可以推薦這個實現。它是mnemonist的一部分,它有一堆方便的數據結構用于不同的用例!

import BiMap from 'mnemonist/bi-map';


const obj = {'low': [1, 2, 3], 'medium': [4, 5, 6], 'high': [7, 8, 9, 10]};


const lookupTable = BiMap.from(obj);


console.log(lookupTable.get('low'))

// > [1,2,3]


console.log(lookupTable.inverse.get([1,2,3]))

// > 'low'


查看完整回答
反對 回復 2023-03-03
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

沒有自定義方法就不可能做到這一點,有很多方法可以完成你想要的。

這種方法使用Proxy對象通過訪問的屬性查找鍵并保留條目以便能夠提供快速訪問。

const obj = {'low': [1, 2, 3], 'medium': [4, 5, 6], 'high': [7, 8, 9, 10]},

      decorate = (o) => {

        const entries = Object.entries(o);

        return new Proxy(o, {

            get(_, accessedProperty) {

              let [key] = (entries.find(([_, values]) => values.includes(+accessedProperty)) || []);

              return key;

            }

        });

      },

      decoratedObj = decorate(obj);



console.log(decoratedObj[1]);

console.log(decoratedObj[4]);

console.log(decoratedObj[10]);

console.log(decoratedObj[11]);


查看完整回答
反對 回復 2023-03-03
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

您可以定義一個函數來根據傳遞的值返回鍵。該函數使用 Object.keys 和 Array.find()


var obj = {'low': [1, 2, 3], 'medium': [4, 5, 6], 'high': [7, 8, 9, 10]};


const findKeyByValue = (value)=>{

 return Object.keys(obj).find(key => obj[key].find(element => element === value))

}


console.log(findKeyByValue(8))


查看完整回答
反對 回復 2023-03-03
  • 6 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號