Как сравнить полученные со страницы элементы с переменной?
Вопрос таков: С помощью данного кода получаю массив значений из атрибутов
console.log([...document.querySelectorAll(".has-tooltip")].map(e => ({
name: e.getAttribute('data-original-title'),
float: e.getAttribute('data-float'),
price: e.getAttribute('data-price')
})));
На выходе получаю то, что ниже на скрине.
Так вот, собственно вопрос, как мне сравнить то, что я получаю с заранее заданными элементами?
Например, я забил в массив что-то типо этого:
const db = {
"AWP | Gungnir (Factory New)": 0.06
"★ Sport Gloves | Pandora's Box (Minimal Wear)": 0.14
"StatTrak™ AK-47 | Fire Serpent (Factory New)": 0.066
}
И нужно, чтобы оно сравнило переменную name с названием, которое в кавычках, а переменную float с тем, что после двоеточия с условием <= и при совпадении выполнило какое то действие конкретно с этим элементом. Если взять с массива и со скрина, то AWP Gungnir бы пропустило, потому что флоат на скрине > чем флоат в базе. Буду очень благодарен за помощь и объяснение того, как это работает. Готов оплатить.
Ответы (2 шт):
const db = {
"AWP | Gungnir (Factory New)": 0.06,
"★ Sport Gloves | Pandora's Box (Minimal Wear)": 0.14,
"StatTrak™ AK-47 | Fire Serpent (Factory New)": 0.066
};
const pageData = [...document.querySelectorAll(".has-tooltip")].map(e => ({
element: e,
name: e.getAttribute('data-original-title'),
float: e.getAttribute('data-float'),
price: e.getAttribute('data-price')
}));
//console.log(db, pageData);
pageData.forEach(item => {
if (item.name in db && item.float <= db[item.name]) {
// do something with item.element
}
});
Ну так и используйте фильтр
let arrData = [...document.querySelectorAll(".has-tooltip")]
.map(({ dataset: { originalTitle: name, float, price } }) => ({ name, float, price }))
const db = {
"AWP | Gungnir (Factory New)": 0.06,
"★ Sport Gloves | Pandora's Box (Minimal Wear)": 0.14,
"StatTrak™ AK-47 | Fire Serpent (Factory New)": 0.066
}
// Для быстрого поиска ключа
const map = new Map(Object.entries(db))
// Отфильтрованный массив с которым далее делаем что угодно
let data = arrData.filter(({ name, float, price }) => {
let key = map.has(name)
return (key && float <= map.get(name))
})