首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript --按值在对象中找到一个特殊属性,这是一个字符串列表

Javascript --按值在对象中找到一个特殊属性,这是一个字符串列表
EN

Stack Overflow用户
提问于 2022-03-27 13:54:23
回答 4查看 73关注 0票数 2

我必须通过值在对象数组中找到一个属性,这是一个字符串列表。

例如,我有这样的东西:

代码语言:javascript
复制
const colors ={
colors-1: [{color: 'blue'}], 
colors-2: [{color: 'gray'}, {color: 'red'}], 
colors-3: [{color: 'white'}]
}

例如,我想通过字符串获得属性colors-2,它在数组值中。

就像这样:

代码语言:javascript
复制
findPropertyByValue(colors, 'red')

和产出:

代码语言:javascript
复制
'colors-2'

你能告诉我如何做到这一点吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-03-27 14:09:50

下面是使用findsome的解决方案。

它接受colors对象的条目,并找到具有输入颜色的元素的条目。

查找返回一个带有[key,value]的条目,因此要获取键,请使用第0元素

在这里,我假设一种颜色有一个独特的键。

?.之前添加了[0] (只有在可用的情况下可选链接访问),这样当输入未找到的颜色时,就不会出现错误(返回undefined)。||操作符用于在查找步骤返回undefined时返回类似于"not“的消息

代码语言:javascript
复制
const colors ={
'colors-1': [{color: 'blue'}], 
'colors-2': [{color: 'gray'}, {color: 'red'}], 
'colors-3': [{color: 'white'}]
}

const findPropertyByValue = (obj,col) => Object.entries(obj).find(([k,v])=>v.some(({color}) => color===col))?.[0] || 'not found'


console.log(findPropertyByValue(colors,'white'))
console.log(findPropertyByValue(colors,'gray'))
console.log(findPropertyByValue(colors,'red'))
console.log(findPropertyByValue(colors,'blue'))
console.log(findPropertyByValue(colors,'green'))

票数 2
EN

Stack Overflow用户

发布于 2022-03-27 14:05:57

以下是你如何实现你想要的。注意,我在引号中添加了对象键,因为它们包含-,所以不会以其他方式工作。

代码语言:javascript
复制
const colors = {
  "colors-1": [{ color: "blue" }],
  "colors-2": [{ color: "gray" }, { color: "red" }],
  "colors-3": [{ color: "white" }]
};

function findPropertyByValue(colors, value) {
  for (let color in colors) {
    if (colors[color].some((c) => c.color == value)) {
      return color;
    }
  }
  return ""; // if there isn't one
}
console.log(findPropertyByValue(colors, "red"));

票数 2
EN

Stack Overflow用户

发布于 2022-03-27 14:11:04

你可以试试这个:

代码语言:javascript
复制
const colors = {
  "colors-1": [{ color: "blue" }],
  "colors-2": [{ color: "gray" }, { color: "red" }],
  "colors-3": [{ color: "white" }],
};

function findPropertyByValue(obj, colorName) {
  return Object.entries(obj).find((entry) =>
    entry[1].some((color) => color.color === colorName)
  )?.[0];
}

console.log(findPropertyByValue(colors, "red"));
console.log(findPropertyByValue(colors, "not in list"));

此解决方案将返回所有指定颜色的字段:

代码语言:javascript
复制
const colors = {
  "colors-1": [{ color: "blue" }],
  "colors-2": [{ color: "gray" }, { color: "red" }],
  "colors-3": [{ color: "white" }],
  "colors-4": [{ color: "white" }, { color: "red" }],
};

function findPropertyByValue(obj, colorName) {
  return Object.entries(obj).reduce(
    (acc, entry) =>
      entry[1].some((color) => color.color === colorName)
        ? [...acc, entry[0]]
        : acc,
    []
  );
}

console.log(findPropertyByValue(colors, "red"));
console.log(findPropertyByValue(colors, "not in list"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71636951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档