Используя ваш подход, вы можете использовать filter()
внутри карты, чтобы проверить, сколько элементов в исходном массиве имеют одинаковое значение текущего анализируемого, используя это условие, вы можете выбрать, что возвращать в качестве нового значения: [ 1113]
const data = [
{count: 400, value: "Car Wash Drops"},
{count: 48, value: "Personal/Seeding"},
{count: 48, value: "Personal/Seeding"},
];
let res = data.map((x, idx) =>
{
if (data.filter(y => y.value === x.value).length > 1)
return [`${x.value} (${idx})`, x.count];
else
return [`${x.value}`, x.count];
});
console.log(res);
Производительность предыдущего подхода может быть улучшена, если мы используем some()
вместо filter()
, например так:
const data = [
{count: 400, value: "Car Wash Drops"},
{count: 48, value: "Personal/Seeding"},
{count: 48, value: "Personal/Seeding"},
{count: 300, value: "Operators/Management"},
{count: 48, value: "Personal/Seeding"}
];
let res = data.map((x, idx) =>
{
if (data.some((y, j) => y.value === x.value && idx !== j))
return [`${x.value} (${idx})`, x.count];
else
return [`${x.value}`, x.count];
});
console.log(res);
И могут быть улучшены еще больше, если мы ранее создали карту со счетчиком времени элемент появляется в исходном массиве. Вот так:
const data = [
{count: 400, value: "Car Wash Drops"},
{count: 48, value: "Personal/Seeding"},
{count: 48, value: "Personal/Seeding"},
{count: 300, value: "Operators/Management"},
{count: 48, value: "Personal/Seeding"}
];
let counters = data.reduce((res, {value}) =>
{
res.set(value, res.has(value) ? res.get(value) + 1 : 1);
return res;
}, new Map());
let res = data.map((x, idx) =>
{
return [
`${x.value}` + (counters.get(x.value) > 1 ? `(${idx})` : ""),
x.count
];
});
console.log(res);
Результатом является то же, но более новый $ () синтаксис намного более ясен и легче читать. По крайней мере вдвойне поэтому при попытке вложить. Вложение не легко со старым синтаксисом, но хорошо работает с новым.
Сравните:
$ echo $(ls $(pwd))
по сравнению с:
$ echo `ls \`pwd\``
Необходимо выйти из встроенных обратных галочек, таким образом, это довольно много более сложно, чтобы и ввести и читать.
Согласно этой странице, существуют по крайней мере одни незначительные различия в том, как они рассматривают встроенные двойные обратные косые черты.
Используя' '' исторический синтаксис, POSIX принял теперь стандарт '$ (...) синтаксис. Посмотрите Раздел 2.6.3
Вы могли бы хотеть читать man bash
:
Когда форма одинарной левой кавычки старого стиля замены используется, обратная косая черта сохраняет свое буквальное значение кроме тех случаев, когда сопровождаемый $, ', или. Первая одинарная левая кавычка, которой не предшествует обратная косая черта, завершает замену команды. При использовании $ (команда) форма все символы между круглыми скобками составляют команду; ни один не рассматривают особенно.
Это находится под разделом "Command Substitution" страницы справочника.