遍历一个对象并找到键[重复]

Posted

技术标签:

【中文标题】遍历一个对象并找到键[重复]【英文标题】:Iterate over an object and find the key [duplicate] 【发布时间】:2021-11-15 16:18:32 【问题描述】:

假设我有这个数据集

let data = 
  1: ['item1', '3435'],
  32: ['item2', '5465'],
  16: ['item3', '6577']

现在我想找到包含数字“3435”的密钥。 为此,我找不到迭代对象的方法。有没有不使用迭代的方法找到匹配项?

findKey(3534) // should return "1"
findKey(6577) // should return "16"

【问题讨论】:

它是否总是需要成为数组的第二个元素?或者只是数组中的任何元素? 第二个元素@Ivar 使用this,但将object[key]改为object[key][1] 还要注意 JSON != 一个 javascript 对象。 【参考方案1】:

也许你可以这样迭代。不确定我们是否可以在不迭代的情况下实现这一目标。

const getKey = (matchString) => 
  let data = 
    1: ['item1', '3435'],
    32: ['item2', '5465'],
    16: ['item3', '6577']
  

  for (let item in data) 
    if (data[item].includes(matchString)) 
      return item;
    
  


const key = getKey('3435')
console.log(key)

【讨论】:

【参考方案2】:

一个可能的解决方案是:

 let data = 
  1 : ['item1', '3435'],
  32 : ['item2', '5465'],
  16 : ['item3', '6577']


for (const [key, value] of Object.entries(data))   
  if(value.includes('3435'))  
  
    console.log(key)
  

【讨论】:

【参考方案3】:

function searchByKey(data,Sval)
  let output
  Object.entries(data).forEach(each=>
    let key = each[0] , val = each[1][1]
    if(Sval == val)output = each[0]
  )
  return output

 
 
let data = 
    1 : ['item1', '3435'],
    32 : ['item2', '5465'],
    16 : ['item3', '6577']
  

let s = searchByKey(data,"5465")

console.log(s)
注意此函数仅适用于您当前的数据结构

【讨论】:

【参考方案4】:

您可以利用Object.entries() 方法来检索密钥。

const data = 
  1: ["item1", "3435"],
  32: ["item2", "5465"],
  16: ["item3", "6577"]
;

const getMatchingKey = (num) => 
  return Object.entries(data).filter(([key, value]) => value[1] === num)[0];
  // if you need all matching keys, remove the 0th index ===============^^^
;

const [key] = getMatchingKey("3435");
console.log(key);

【讨论】:

【参考方案5】:

您不能直接遍历 JSON,但可以使用 Object.keys() 获取键列表。

从那里,他们有两个选择:

如果您知道只有一个值匹配,请使用循环返回选定的值

function findInObject(value) 
  for (let i in Object.keys(data)) 
    if (data[i][1] == value) 
      return i
    
  

返回16

如果可能有多个条目,请使用filter()

function findInObject(value) 
  return Object.keys(data.filter(elem => elem[1] == value))

返回[16, 42, 1000]

【讨论】:

以上是关于遍历一个对象并找到键[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在对象的 json 数组中找到一个键值并返回另一个带有角度的键值

遍历Angular 8中的对象键[重复]

如何遍历对象数组以查找 ID 然后返回兄弟键

SaveChangesAsync 失败,分配用户到对象 AspNetUsers 重复键违规

如何遍历对象数组并制作键值对?

找到重复的值并比较另一个键