GOOGLE ADS

пятница, 6 мая 2022 г.

Сравните структуру объекта

У меня есть такой объект:

const obj = {
name: "one",
created: "2022-05-05T00:00:00.0Z",
something: {
here: "yes"
}
}

Я могу проверить, есть ли у него определенные атрибуты один за другим:

assert( obj.name!== undefined && obj.name === "one")
assert( obj.something!== undefined && obj.something.here!== undefined && obj.something.here === "yes")

Есть ли способ добиться того же, передав другой объект для сравнения? Другой объект будет иметь меньше значений (в этом примере мне все равно, createdприсутствует ли атрибут)

Что-то вроде:


const obj = {
name: "one",
created: "2022-05-05T00:00:00.0Z",
something: {
here: "yes"
}
}
hasAllOf(obj, {
name: "one",
something: {
here: "yes"
}
}) // returns true

Либо с lodash, либо с какой-то другой библиотекой?


Решение проблемы

Вы можете писать рекурсивно hasAllOfс помощью помощника по проверке типов, is-


const is = (t, T) =>
t?.constructor === T
const hasAllOf = (a, b) =>
is(a, Object) && is(b, Object) || is(a, Array) && is(b, Array)
? Object.keys(b).every(k => hasAllOf(a[k], b[k]))
: a === b
const obj = {
name: "one",
created: "2022-05-05T00:00:00.0Z",
something: {
here: "yes",
and: ["this", 2, { f: "three" }]
}
}
console.log(
hasAllOf(obj, {
name: "one",
something: {
here: "yes",
and: ["this", 2, { f: "three" }]
}
})
)

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...