Задать вопрос
  • Как отобразить каждое поле объекта Vue for loop?

    @oexlkinq
    это SFC конечно, но в целом логику не сложно вынуть
    <script setup>
    const test = {
        test2: {
            obj2: "test",
            obj3: "test",
        },
        test3: {
            obj2: "blab",
            obj3: "blabb2",
        }
    };
    </script>
    <template>
        <p>
            <template v-for="(entries, i) in Object.entries(test)">
                <span v-if="i > 0">,<br></span>
                {{ entries[0] }}: {<br>
                <span v-for="subEntries in Object.entries(entries[1]).map(entry => [entry[0], JSON.stringify(entry[1])])">
                    <span class="sub">{{ subEntries[0] + ': ' + subEntries[1] }}</span>,<br>
                </span>
                }
            </template>
        </p>
    </template>
    <style>
    p span.sub {
        padding-left: 10px;
    }
    </style>
    Ответ написан
    Комментировать
  • Как можно преобразовать массив из объектов с помощью функции reduce?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Делаем ровно то, что спрошено:

    const result = Object.values(data.reduce((acc, n) => (
      (acc[n.brand] ??= { ...n, price: 0 }).price += n.price,
      acc
    ), {}));

    Или, решаем задачу в более общем виде:

    function uniqueWithSum(data, key, sumKey) {
      const getKey = key instanceof Function ? key : n => n[key];
      const unique = new Map;
    
      for (const n of data) {
        const k = getKey(n);
        unique
          .set(k, unique.get(k) ?? (u => (u[sumKey] = 0, u))(structuredClone(n)))
          .get(k)[sumKey] += n[sumKey];
      }
    
      return [...unique.values()];
    }

    // ваш случай
    const result = uniqueWithSum(data, n => n.brand, 'price');
    
    // элементам исходного массива не обязательно быть объектами
    uniqueWithSum([
      [ 'aaa',   1 ],
      [ 'aaa',  10 ],
      [ 'aaa', 100 ],
      [ 'bbb', 666 ],
    ], 0, 1) // [ [ 'aaa', 111 ], [ 'bbb', 666 ] ]
    Ответ написан
    1 комментарий