簡體   English   中英

從 value 中獲取 JS Object 的 key

[英]Get the key of a JS Object from the value

我試圖從輸入值中獲取 Typescript 中JS Objectkey ,問題是這些值在Array內。

這是我在值不在數組中的情況下看到的:

const exampleObject = {
  key1: 'Geeks',
  key2: 'Javascript'
};

function getKeyByValue(object, value) {
  for (var prop in object) {
      if (object.hasOwnProperty(prop)) {
          if (object[prop] === value)
          return prop;
      }
  }
}

console.log(getKeyByValue(exampleObject,'Geeks')) // key1

這是我想從中獲取密鑰的對象的示例:

const exampleObject = {
  key1: ['Geeks','test1','test2'],
  key2: ['Javascript','test3','test4']
};

function getKeyByValue(object, value) {
  for (var prop in object) {
      if (object.hasOwnProperty(prop)) {
          if (object[prop] === value)
          return prop;
      }
  }
}

console.log(getKeyByValue(exampleObject,'Geeks')) // undefined

我需要在不使用Array.prototype.includes()的情況下獲取密鑰,因為將結果變量鍵入為String會給我一個error ,即它可能未定義。

我的問題:我不知道如何通過函數內部的數組來查找值並獲取密鑰

更新

我想要的是避免返回未定義的可能性,因為輸入值將始終在對象內部,我該如何實現呢?

@segmet 你可以使用我的代碼

const exampleObject = {
    key1: ['Geeks', 'test1', 'test2'],
    key2: ['Javascript', 'test3', 'test4']
};

function getKeyByValue(object, value) {
    var output = "";
    for (var prop in object) {
    // finding and removing element from array
        object[prop].find(i => {
                if (i === value) {
                    output = prop;
                    return prop;
                }
            }
        )
    }
    return output
}

console.log(getKeyByValue(exampleObject, 'Geeks'))
function getKeyByValue(object, value) {
  const key = Object.entries(object).filter(([key, val]) => val.includes(value));
  return Object.fromEntries(key);
}

試試這個功能你會得到匹配你的鑰匙的對象

你可以做這樣的事情,然后檢查null


const getKeyFromValue = (obj:Object, value:string | string[]) => { 
    for (let key in obj) {
        if (typeof value === 'string') {
            if (obj[ key ].includes(value)) {
                return key;
            }
        }
        else if (Array.isArray(value)) { 
            if (obj[ key ].every(val => value.includes(val))) {
                return key;
            }
        }
       
    }
    return null;
}

再試一次:

 const exampleObject = { key1: ['Geeks','test1','test2'], key2: ['Javascript','test3','test4'] }; function getKeyByValue(obj, data) { for (const [key, value] of Object.entries(obj)) { return (~value.indexOf(data)) ? key : false } } console.log(getKeyByValue(exampleObject,'Geeks'))

您可以通過使用 3 個 JavaScript 方法 - Object.keys()Array.find()Array.indexOf() ,通過一行代碼來實現這一點

 const exampleObject = { key1: ['Geeks','test1','test2'], key2: ['Javascript','test3','test4'] }; function getKeyByValue(object, value) { const res = Object.keys(exampleObject).find(key => exampleObject[key].indexOf(value) !== -1); return res || '' } console.log(getKeyByValue(exampleObject,'Geeks'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM