繁体   English   中英

获取 object 内部数组中元素的键

[英]get key of element in array which is inside object

我有一个数组,里面有一个 object。 试图获取数组内元素的键。

当我搜索 4512 时,我应该将 key 作为 egg_code。

const items = {
  storeItems: {
    milk_code: [1212, 9898, 1214],
    vegetables_code: [2222, 75674, 8943, 3452],
    eggs_code: [4543, 4512, 1754, 9090]
  }
}
if (items.storeItems.includes(4512)) {
  const type = Object.keys(items(4512);
  console.log(type);
}

您需要迭代storeItems的键/值对,搜索值以返回键

 const findKey = (obj, search) => { for (let [ key, val ] of Object.entries(obj)) { if (val.includes(search)) return key } return null } const items = { storeItems: { milk_code: [1212, 9898, 1214], vegetables_code: [2222, 75674, 8943, 3452], eggs_code: [4543, 4512, 1754, 9090] } } console.info(findKey(items.storeItems, 4512))

这将返回找到(按定义顺序)具有匹配值的第一个键。


如果该值可以出现在多个值中并且您想返回所有匹配项,则可以使用简单的过滤器

 const findKeys = (obj, search) => { return Object.keys(obj).filter(key => obj[key].includes(search)) } const items = { storeItems: { milk_code: [1212, 9898, 1214, 4512], // added 4512 here vegetables_code: [2222, 75674, 8943, 3452], eggs_code: [4543, 4512, 1754, 9090] } } console.info(findKeys(items.storeItems, 4512))

这里是 go:

 const search_q = 4512; let k = null; const items = { storeItems: { milk_code: [1212, 9898, 1214], vegetables_code: [2222, 75674, 8943, 3452], eggs_code: [4543, 4512, 1754, 9090] } } Object.keys(items.storeItems).forEach(item => { if(items.storeItems[item].includes(search_q)) k = item; }) console.log(k)

使用Object.entriesfind方法

 const items = { storeItems: { milk_code: [1212, 9898, 1214], vegetables_code: [2222, 75674, 8943, 3452], eggs_code: [4543, 4512, 1754, 9090], }, }; const getKey = (obj, val) => Object.entries(obj).find(([key, arr]) => arr.includes(val))?.shift(); console.log(getKey(items.storeItems, 4512));

你可以写一点 function 来为你做。 这个 function 第一次找到代码时匹配。

 const items = { store_items: { milk_code: [1212, 9898, 1214], vegetables_code: [2222, 75674, 8943, 3452], eggs_code: [4543, 4512, 1754, 9090] } } function find_code( code, object ) { for( const property in object ) if( object[property].includes(code) ) return property; return undefined; } console.log( find_code( 4512, items.store_items ) ); console.log( find_code( 1200, items.store_items ) ); console.log( find_code( 8943, items.store_items ) );

请注意,您正在迭代Object ,而不是Array 您可以使用for..offor..in object。 我使用for..in ,因为默认情况下会提取属性名称。

在 MDN 上阅读有关 for..in 的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM