我遇到了一个问题,我有一个包含对象数组的响应,该数组并不总是基于响应的相同顺序,但我需要验证至少 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
这样的东西会更好吗? (仍然不确定我是否理解 toEqual
、toBe
和 toContainEqual
等之间的区别,因为它们感觉非常相似。
我想我需要添加一些东西,我正在检查的对象本身可能包含随机数据(如日期/时间戳/等),所以我不会具体知道对象的所有数据。
最佳答案
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/