Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.05.2023, 09:31
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Сравнение данных при переборе
Привет.
<div class="group">
	<div data-cost="0" class="item">1</div>
	<div data-id="id" data-cost="10" class="item">2</div>
	<div data-cost="20" class="item">3</div>
</div>
<div class="group">
	<div data-cost="0" class="item">1</div>
	<div data-cost="30" class="item">2</div>
	<div data-cost="40" class="item">3</div>
</div>
<div class="group">
	<div data-cost="0" class="item show">4</div>
	<div data-cost="50" data-id="id" class="item show">5</div>
	<div data-cost="60" class="item show">6</div>
</div>


Подскажите, как при переборе всех item получить data-cost, при условии что data-id равны? В данном примере это data-cost="10"

Я пытался сделать как то так
$('.item').each(function(i, el) {
var link = el.dataset.id
if(link){
if(el.classList.contains('show')){
var a = el
}else{
vat b = el
}
//Но при попытке 
if(a.dataset.id == b.dataset.id)
// получаю ошибку, что а-нет
}
})
Ответить с цитированием
  #2 (permalink)  
Старый 17.05.2023, 15:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

ureech,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>

<div class="group">
	<div data-cost="0" class="item">1</div>
	<div data-id="id" data-cost="10" class="item">2</div>
	<div data-cost="20" class="item">3</div>
</div>
<div class="group">
	<div data-cost="0" class="item">1</div>
	<div data-cost="30" class="item">2</div>
	<div data-cost="40" class="item">3</div>
</div>
<div class="group">
	<div data-cost="0" class="item show">4</div>
	<div data-cost="50" data-id="id" class="item show">5</div>
	<div data-cost="60" class="item show">6</div>
</div>
<script>
let id = 'id';
let sel = `[data-id="${id}"]`;
let num = [...document.querySelectorAll(sel)].reduce((sum, {dataset : {cost}})=> sum + +cost, 0);
alert(num);
</script>
</body>

</html>
Ответить с цитированием
  #3 (permalink)  
Старый 18.05.2023, 07:43
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Не то. Нужно получить
Сообщение от ureech
В данном примере это data-cost="10"
А у вас 60.
К тому же внутри $('.item').each(function(i, el) { не хочет работать. А нужно именно при переборе.

Последний раз редактировалось ureech, 18.05.2023 в 08:08.
Ответить с цитированием
  #4 (permalink)  
Старый 18.05.2023, 07:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Сообщение от ureech
А у вас 60.
Сообщение от ureech
<div data-id="id" data-cost="10"
+
Сообщение от ureech
<div data-cost="50" data-id="id"
= 60
Ответить с цитированием
  #5 (permalink)  
Старый 18.05.2023, 08:13
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Да и не в цикле тоже не работает). Тут
let sel = `[data-id="${id}"]`;

у меня должна быть длинная строка из чисел и букв, а по факту вижу какие то три числа.
Ответить с цитированием
  #6 (permalink)  
Старый 18.05.2023, 08:14
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Сообщение от рони Посмотреть сообщение
+ = 60
Это то я вкурил)
Ответить с цитированием
  #7 (permalink)  
Старый 18.05.2023, 08:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

ureech,
<!DOCTYPE HTML>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
</head>
<body>
    <div class="group">
        <div data-cost="0" class="item">1</div>
        <div data-id="id" data-cost="10" class="item">2</div>
        <div data-cost="20" class="item">3</div>
    </div>
    <div class="group">
        <div data-cost="0" class="item">1</div>
        <div data-cost="30" class="item">2</div>
        <div data-cost="40" class="item">3</div>
    </div>
    <div class="group">
        <div data-cost="0" class="item show">4</div>
        <div data-cost="50" data-id="id" class="item show">5</div>
        <div data-cost="60" class="item show">6</div>
    </div>
    <script>
        let items = document.querySelectorAll('.item[data-id]');
        let obj = [...items].reduce((ob, {
            dataset: {
                cost,
                id
            }
        }, i) => {
            let ar = ob[id];
            if (!ar) ob[id] = ar = [cost];
            else {
                ar.push(cost);
                let txt = `Что вам нужно я не понимаю, но есть ${ar.length} элемента с id = ${id} с cost = ${ar}`
                alert(txt)
            }
            return ob
        }, {});
    </script>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 18.05.2023, 08:24
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Ок,спасибо.Суть я понял.Буду колдовать)
Ответить с цитированием
  #9 (permalink)  
Старый 18.05.2023, 08:55
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 768

Ещё вопрос). На выходе я имею массив. А как получить объект? Или что то типа того. Так как при таком раскладе работает только с одной парой значений. Если data-id не два, а четыре(две пары), то выводит только последнию.

Последний раз редактировалось ureech, 18.05.2023 в 08:59.
Ответить с цитированием
  #10 (permalink)  
Старый 18.05.2023, 09:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

ureech,
предложенный выше код выводит все совпадения в виде объекта, какой код у вас, не знаю.
пишите что на входе, что хотите получить на выходе.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Reactjs сохранение данных объекта при обновлении состояния PereCC Библиотеки/Тулкиты/Фреймворки 0 18.12.2022 16:03
Возврат данных в форму при возврате на страницу Manyasha Общие вопросы Javascript 2 22.08.2020 10:51
Необъяснимое поведение прокрутки при использовании homekey demoniqus Events/DOM/Window 2 26.08.2019 10:05
Проблема при подстановке переменной при получении данных из JSON Rodriguez11 Элементы интерфейса 2 19.08.2019 19:29
Сохраннение измененных данных при клике на кнопку Tanya51 Общие вопросы Javascript 0 10.08.2017 11:35