簡體   English   中英

如何從具有部分索引值的對象的JavaScript獲取值

[英]how to get value from object with a partial index value javascript

我有一個包含很多鍵和值的對象。 我可以使用索引獲取任何值。 但是我沒有完整的索引,只有一部分,我能否基於一部分索引來獲取值。

例:

c = {'select':'MyValue',...}

我可以使用索引來獲取值,如下所示:

c['select'] = 'MyValue'

我試圖創建此函數來搜索確切的值:

function search(nameKey, c){
    for (var i=0; i < c.length; i++) {
        if (c[i].select === nameKey) {
            return c[i];
        }
    }
}

c['select']將返回'MyValue'但我需要做類似c['Sel']c['select']c['Select']c['selected']以返回相同的'MyValue'

您可以使用Object.keys()獲取屬性名稱的數組。

然后使用Array#find()找到第一個匹配項以獲取所需的密鑰(如果存在)

 const data = { aaaa: 1, bbbbbbb: 2, cccc: 3 } function search(nameKey, obj) { nameKey = nameKey.toLowerCase();// normalize both to lowercase to make it case insensitive const keys = Object.keys(obj); const wantedKey = keys.find(key => key.toLowerCase().includes(nameKey)); return wantedKey ? obj[wantedKey] : false; } console.log('Term "a" value:', search('a',data)) console.log('Term "bb" value:', search('bb',data)) console.log('Term "X" value:', search('X',data)) 

由於搜索條件含糊不清,因此我只是在屬性名稱中的任意位置找到了任何匹配項,並且沒有超過找到的第一個匹配項

好吧,邏輯似乎不太清楚,與key匹配方式也不很相關。

但這是一個功能,在您顯示的特定情況下可能會有所幫助:

function search(nameKey, obj) {
  if (obj.hasOwnProperty(nameKey)) {
    return obj[nameKey];
  } else {
    var res = Object.keys(obj).filter(function(k) {
      return (k.toLowerCase().indexOf(nameKey.toLowerCase()) > -1) || (nameKey.toLowerCase().indexOf(k.toLowerCase()) > -1);
    });
    return res ? obj[res] : false;
  }
}

說明:

  • 首先,我們使用Object#hasOwnProperty()來檢查對象的搜索名稱是否為鍵/屬性,然后返回其值,這將避免循環所有鍵。
  • 否則,我們使用Object.keys()來獲取對象的鍵。
  • 然后,我們在keys數組上使用Array#filter()方法來檢查相關key存在,然后返回其值,否則返回false

演示:

 function search(nameKey, obj) { if (obj.hasOwnProperty(nameKey)) { return obj[nameKey]; } else { var res = Object.keys(obj).filter(function(k) { return (k.toLowerCase().indexOf(nameKey.toLowerCase()) > -1) || (nameKey.toLowerCase().indexOf(k.toLowerCase()) > -1); }); return res ? obj[res] : false; } } var c = { 'select': 'MyValue' }; console.log(search("Sel", c)); 

這是一個班輪(!):

假設數組在data ,部分索引值在selector

const result = Object.keys(data).filter(k => k.toLowerCase().indexOf(selector.toLowerCase()) != -1).map(k => data[k]);

上面的代碼返回一個數組(因為可能有多個匹配項)。 如果只需要第一個元素,則執行result[0]

暫無
暫無

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

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