首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在嵌套数组中查找值

在嵌套数组中查找值
EN

Stack Overflow用户
提问于 2019-03-25 02:52:00
回答 3查看 149关注 0票数 2

我正在尝试在对象数组中查找匹配值。

我正在使用find来完成这项工作,这似乎工作得很好。但是,如果我需要为其中一个键分配多个值,该怎么办?

下面是当前的代码:

代码语言:javascript
复制
const snack = "strawberry";

const fruits = [
    { label: "yellowFruit", value: "banana" },
    { label: "purpleFruit", value: "grape" },
    { label: "redFruit", value: "apple" },
    { label: "greenFruit", value: "waltermelon" },
];

下面是我如何发现我的价值的:

代码语言:javascript
复制
fruits.find(fruit => fruit.value === snack) || fruits[0]

我实际上需要在不复制标签的情况下将两个值关联到标签redFruit,如下所示,但是这样find就不能再做这项工作了。

如下所示:

代码语言:javascript
复制
const snack = "strawberry";

const fruits = [
    { label: "yellowFruit", value: "banana" },
    { label: "purpleFruit", value: "grape" },
    {
        label: "redFruit",
        value: [
            { val: "apple" },
            { val: "strawberry" }
        ]
    },
    { label: "greenFruit", value: "waltermelon" },
];

但是使用以下代码查找strawberry并不匹配:

代码语言:javascript
复制
fruits.find(fruit => fruit.value === snacks) || fruits[0]

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-25 02:58:28

你必须根据value属性类型使用不同的方法,如果值是一个数组,那么使用Array#some方法来实现结果。

代码语言:javascript
复制
let res = fruits.find(({ value }) => Array.isArray(value) ? value.some(({ val }) => val === snacks) : value === snacks) || fruits[0]

代码语言:javascript
复制
const snacks = "strawberry";

const fruits = [{
    label: "yellowFruit",
    value: "banana"
  },
  {
    label: "purpleFruit",
    value: "grape"
  },
  {
    label: "redFruit",
    value: [{
        val: "apple"
      },
      {
        val: "strawberry"
      }
    ]
  },
  {
    label: "greenFruit",
    value: "waltermelon"
  },
];

let res = fruits.find(({ value }) => Array.isArray(value) ? value.some(({ val }) => val === snacks) : value === snacks) || fruits[0]

console.log(res);

票数 2
EN

Stack Overflow用户

发布于 2019-03-25 03:08:14

保持数据简单:

代码语言:javascript
复制
const snack = "strawberry";

const fruits = [
    { label: "yellowFruit", value: "banana" },
    { label: "purpleFruit", value: "grape" },
    { label: "redFruit", value: "apple" },
    { label: "redFruit", value: "strawberry" },
    { label: "greenFruit", value: "waltermelon" },
];

..。你的代码也会很简单:

代码语言:javascript
复制
const result = fruits.find(({ value }) => value === snack)
票数 1
EN

Stack Overflow用户

发布于 2019-03-25 03:10:41

您可以这样做:

代码语言:javascript
复制
const snack = "strawberry";

const fruits = [{
    label: "yellowFruit",
    value: "banana"
  },
  {
    label: "purpleFruit",
    value: "grape"
  },
  {
    label: "redFruit",
    value: [{
        val: "apple"
      },
      {
        val: "strawberry"
      }
    ]
  },
  {
    label: "greenFruit",
    value: "waltermelon"
  },
];

let itemExists = fruits.some(item =>
  Array.isArray(item.value) ?
  item.value.some(subItem => subItem.val === snack) :
  item.value === snack);
  
console.log(itemExists);

通过这种方式,无论该项是否存在,您都将收到一个布尔值。希望这能有所帮助,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55327320

复制
相关文章

相似问题

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