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

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

如何在包含具有數組值的子對象的對象中搜索值

如何在包含具有數組值的子對象的對象中搜索值

慕田峪9158850 2022-11-11 16:54:44
我有 json 對象,我想在其中搜索一個鍵,如果鍵匹配,則返回該對象鍵作為結果??紤]下面的例子obj = {    "India": {        "Karnataka": ["Bangalore", "Mysore"],        "Maharashtra": ["Mumbai", "Pune"]    },    "USA": {        "Texas": ["Dallas", "Houston"],        "IL": ["Chicago", "Aurora", "Pune"]    }}input: Puneoutput: ['Maharashtra','IL']
查看完整描述

4 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

你可以試試這個-


const obj = {

  "India" : {

    "Karnataka" : ["Bangalore", "Mysore"],

    "Maharashtra" : ["Mumbai", "Pune"]

  },

  "USA" : {

    "Texas" : ["Dallas", "Houston"],

    "IL" : ["Chicago", "Aurora", "Pune"]

  }

};



const search = (obj, keyword) => {

  return Object.values(obj).reduce((acc, curr) => {

      Object.entries(curr).forEach(([key, value]) => {

        if (value.indexOf(keyword) > -1) {

          acc.push(key);

        }

      });

    return acc;

  }, []);

}


console.log(search(obj, 'Pune'));


這將搜索keyword數組中是否存在。如果然后將鑰匙推入reduce蓄電池。

查看完整回答
反對 回復 2022-11-11
?
LEATH

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

假設您的數據將始終采用 country:state:city 的形式,您可以執行以下操作。獲取鍵的數組,如下所示:


keys = Object.keys(obj);

然后遍歷每個鍵:


function classify(input){

res = [];

Object.keys(obj).forEach((key)=>{

   states = obj[key];

   Object.keys(states).forEach((stateKey)=>{

      if(states[stateKey].includes(input)){

         res.push([stateKey,key]);

      }

   })

})

return(res);}

這也將返回一個包含國家/地區的數組:


input: Pune

output: [['Maharashtra','India'],['IL','USA']]


查看完整回答
反對 回復 2022-11-11
?
萬千封印

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

const input = "Pune"

const result = []

for (v1 in obj) {

  for (v2 in obj[v1]) {

    for (let i = 0; i < obj[v1][v2].length; i++) {

      if (obj[v1][v2][i] === input) {

        result.push([v2][0])

      }

    }

  }

}


查看完整回答
反對 回復 2022-11-11
?
SMILET

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

function isObject (variable) { 


return variable !== undefined && variable !== null && variable.constructor === Object


}


function find(obj,value,keyPath = []){

   let values = Object.values(obj) 

   let keys = Object.keys(obj)

  

   for(let i in values){

      if(isObject (values[i])) {

         find(values[i],value,keyPath )

          

      }else if(Array.isArray(values[i])){

         let foundValue = values[i].find(e=>value==e)

         if(foundValue ){

            keyPath.push(keys[i]) 

         }

      }

   }

   return keyPath 

}

obj = { "India": { "Karnataka": ["Bangalore", "Mysore"], "Maharashtra": ["Mumbai", "Pune"] }, "USA": { "Texas": ["Dallas", "Houston"], "IL": ["Chicago", "Aurora", "Pune"] } }





console.log(find(obj,"Dallas"))

這應該這樣做。它應該能夠做任何深度。


查看完整回答
反對 回復 2022-11-11
  • 4 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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