子数组是否包含某个值?

Does subarray contain a certain value?

我有一个这样的数组:

var = [
    {
        "a": "value",
        "b": "value2"
    },
    {
        "a": "value3",
        "b": "value4"
    }
    ...
]

我需要查找是否有任何子数组包含特定值。

我试过了

var.flat().includes("value")

但由于某些原因总是 return 错误并且 .flat() 甚至没有展平数组。

我也试过了

var.includes("value")

没有 .flat() 但只有 return 如果顶层包含它。

我可以

var = [
    "a": [
        "value",
        "value3"
        ...
    ],
    "b": [
        "value2",
        "value4"
        ...
    ]
]

但我宁愿不这样做,因为那样需要我重写一些我已经写过的代码。

首先使用flatMap将所有嵌套值提取到一个平面数组中:

const objs = [
    {
        "a": "value",
        "b": "value2"
    },
    {
        "a": "value3",
        "b": "value4"
    }
];
const values = objs.flatMap(Object.values);
console.log(values.includes("value"));

您可以使用 some 进行迭代(遇到第一个 value 时会立即停止循环),结合 Object.values(从对象获取值数组)和 .includes(检查数组是否有value),

const data = [
  {
    a: "value",
    b: "value2",
  },
  {
    a: "value3",
    b: "value4",
  },
];

const valid = data.some((d) => Object.values(d).includes("value"));

console.log(valid);

在您的代码中,varr 已经展平了对象数组。因为您想签入对象值。使用 varr.map(Object.values).flat()

varr = [
  {
    a: "value",
    b: "value2",
  },
  {
    a: "value3",
    b: "value4",
  },
];

console.log(varr.map(Object.values).flat().includes("value"));