Каково различие между $ (…) и' …'

Используя ваш подход, вы можете использовать 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);

10
задан Karl Yngve Lervåg 26 February 2009 в 22:13
поделиться

3 ответа

Результатом является то же, но более новый $ () синтаксис намного более ясен и легче читать. По крайней мере вдвойне поэтому при попытке вложить. Вложение не легко со старым синтаксисом, но хорошо работает с новым.

Сравните:

$ echo $(ls $(pwd))

по сравнению с:

$ echo `ls \`pwd\``

Необходимо выйти из встроенных обратных галочек, таким образом, это довольно много более сложно, чтобы и ввести и читать.

Согласно этой странице, существуют по крайней мере одни незначительные различия в том, как они рассматривают встроенные двойные обратные косые черты.

9
ответ дан 3 December 2019 в 20:06
поделиться

Используя' '' исторический синтаксис, POSIX принял теперь стандарт '$ (...) синтаксис. Посмотрите Раздел 2.6.3

5
ответ дан 3 December 2019 в 20:06
поделиться

Вы могли бы хотеть читать man bash:

Когда форма одинарной левой кавычки старого стиля замены используется, обратная косая черта сохраняет свое буквальное значение кроме тех случаев, когда сопровождаемый $, ', или. Первая одинарная левая кавычка, которой не предшествует обратная косая черта, завершает замену команды. При использовании $ (команда) форма все символы между круглыми скобками составляют команду; ни один не рассматривают особенно.

Это находится под разделом "Command Substitution" страницы справочника.

5
ответ дан 3 December 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: