javascript - 检查对象数组是否包含值

标签 javascript playwright

我遇到了一个问题,我有一个包含对象数组的响应,该数组并不总是基于响应的相同顺序,但我需要验证至少 1 个对象对象数组包含特定值(或键/值对)。

例如,JSON 如下所示:

{
  data: [
    {
      foo: 'Name 1',
      bar: '2022-06-07T00:00:00',
    },
    {
      foo: 'Name 2',
      bar: '2022-06-07T00:00:00',
    },
    {
      foo: 'Name 3',
      bar: '2022-06-07T00:00:00',
    }

}

我会使用类似 expect(responseBody.data).toContainEqual({foo: "Name 2"}) 的东西,但这不起作用。像 toHaveProperty 这样的东西会更好吗? (仍然不确定我是否理解 toEqualtoBetoContainEqual 等之间的区别,因为它们感觉非常相似。

我想我需要添加一些东西,我正在检查的对象本身可能包含随机数据(如日期/时间戳/等),所以我不会具体知道对象的所有数据。

最佳答案

const responseBody = {
  data: [
    {
      foo: 'Name 1',
      bar: '2022-06-07T00:00:00',
    },
    {
      foo: 'Name 2',
      bar: '2022-06-07T00:00:00',
    },
    {
      foo: 'Name 3',
      bar: '2022-06-07T00:00:00',
    }
  ]
};

const desiredValue = 'Name 2';

const containsDesiredValue = responseBody.data.some(obj => obj.foo === desiredValue);

expect(containsDesiredValue).toBe(true);

上面的代码使用 some 方法检查数组中的任何对象是否包含“foo”键的特定值。

我之前用 JS 编写的代码:

function checkIfObjectPresent(inputArray, matchObj) {
  const size = inputArray.length;
  
  for(let i = 0; i < size; i++) {
    let curr = inputArray[i];
    
    if(JSON.stringify(curr) === JSON.stringify(matchObj)) {
      return true;
    }
  }
  
  return false;
}

let data = [
  {
    foo: 'Name 1',
    bar: '2022-06-07T00:00:00',
  },
  {
    foo: 'Name 2',
    bar: '2022-06-07T00:00:00',
  },
  {
    foo: 'Name 3',
    bar: '2022-06-07T00:00:00',
  }
]
  
let compWith = {
      foo: 'Name 1',
      bar: '2022-06-07T00:00:00',
};

let compWith2 = {
  fool: 'Tmp',
  bar: '2022-06-07T00:00:00',
};
    
console.log(checkIfObjectPresent(data, compWith)); // returns true
console.log(checkIfObjectPresent(data, compWith2)); // returns false

关于javascript - 检查对象数组是否包含值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77151102/

相关文章:

javascript - 为什么对象键转换为 "[object Object]"?

javascript - Node.js 如何等待异步调用(readdir 和 stat)

javascript - 如何在 playwright 中运行自定义 js 函数

analytics - 如何识别 Playwright 测试流量以便从分析中过滤掉它?

javascript - 将数组值从字符串更改为 int jQuery

javascript - 如何从 react 组件返回值到调用模块?

typescript - playwright中如何实现浏览器放大缩小?

e2e-testing - Playwright 测试库 - 选择器的父元素

python - 如何使用 playwright 快速查明页面中是否存在某个元素

javascript - javascript 中的正则表达式无效