запустить функцию с уникальным значением, используя javascript / node js

let object=
    [
     {
      id:`01`,
      name:`fish`,
      type:null,
      care:'owner',
     },
     {
      id:`02`,
      name:`fish`,
      type:'fresh',
      care:'peter',
     },
     {
      id:`03`,
      name:`fish`,
      type:`fresh`,
      care:'amy',
     },
     {
      id:`04`,
      name:`fish`,
      type:`tank`,
      care:'abc',
     },
     {
      id:`05`,
      name:`animal`,
      type:`pet`,
      care:'teen',
     },,
     {
      id:`06`,
      name:`animal`,
      type:`pet`,
      care:'ran',
     },
     {
      id:`07`,
      name:`animal`,
      type:null,
      care:'roh',
     },
     {
      id:`08`,
      name:`food`,
      type:`veg`,
      care:'test',
     },
     {
      id:`09`,
      name:`food`,
      type:null,
      care:'dop',
     }
    ]
    
    object.map((value)=>{
console.log(value.name)

// i am calling function here by passing value.name as a parameter
   let gotValue = functionName(value.name);

 // using type also 
 if(typeof value.type!=="string"){
// Do some task here with gotValue

  }
})

У меня есть этот объект, и я получаю от него некоторую ценность, так как я хочу передать это имя функции, но проблема связана с повторением данных, которые функция вызывает снова и снова, есть ли возможность, что я могу запустить функцию внутри карты, но с уникальным значением какая-либо помощь?

  • так как мой результат становится таким
fish
fish
fish
animal
animal
animal

и это value.name проходит внутри моей функции, поэтому он повторяется так

functionName(fish);
functionName(fish);
functionName(fish);
functionName(animal);
functionName(animal);
functionName(animal); 

многократная функция работает с тем же именем и получает повторяющиеся значения

  • просто нужно, чтобы моя функция запускалась с уникальным именем
functionName(fish)
functionName(animal);
functionName(food);
  • поскольку я хочу оставаться внутри функции карты, потому что я выполняю некоторую задачу, которая может быть возможна только внутри карты, поэтому мне нужно уникальное значение
# object
Источник
  • 0
    Используйте Set для уникальных значений
  • 2
    Если вы не собираетесь использовать возвращаемое значение .map() тогда .map() - неправильный инструмент.
  • 2
    Как мне задать хороший вопрос? -> Каков ожидаемый результат / результат? А в чем собственно проблема?
  • 0
    [...new Set(object.map((o) => o.name))].forEach(functionName); если functionName принимает name качестве входных данных.
  • 0
    @decpk я должен написать это внутри функции карты?
  • 0
    как уже сказал Андреас, если вы не возвращаете что-то с карты, не используйте карту. Это альтернатива.
  • 0
    да, я ничего не возвращаю, но мне нужны значения, которые присутствуют внутри, например: мне нужно type значение типа уникальны, но проблема связана с именем, поскольку они продолжают повторяться, и я хочу, чтобы имя было уникальным только внутри функции карты @decpk
  • 0
    Я обновил свой вопрос, пожалуйста, посмотрите фрагмент :)
  • 0
    Как вы рассчитываете, что объект уникален? Это на основе name или name and type
Codelisting
за 1 против
Лучший ответ

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

let object = [
  {
    id: `01`,
    name: `fish`,
    type: null,
  },
  {
    id: `02`,
    name: `fish`,
    type: `fresh`,
  },
  {
    id: `03`,
    name: `fish`,
    type: `tank`,
  },
  {
    id: `04`,
    name: `animal`,
    type: `pet`,
  },
  {
    id: `05`,
    name: `animal`,
    type: `wild`,
  },
  {
    id: `06`,
    name: `animal`,
    type: null,
  },
  {
    id: `07`,
    name: `food`,
    type: `veg`,
  },
  {
    id: `08`,
    name: `food`,
    type: null,
  },
];

const dict = new Set();
object.map((value) => {
  if (!dict.has(value.name)) { // Run only if objet with name is not already existed in dict
    dict.add(value.name);
    console.log(value.name); // For testing
    // functionName(value.name);
  }
});

Если вы хотите вызвать функцию с двумя фильтрами, вы можете использовать некоторые из них для поиска элементов в массиве. Смотрите, я теперь объявил dict как массив

let object = [{
    id: `01`,
    name: `fish`,
    type: null,
  },
  {
    id: `02`,
    name: `fish`,
    type: `fresh`,
  },
  {
    id: `03`,
    name: `fish`,
    type: `tank`,
  },
  {
    id: `04`,
    name: `animal`,
    type: `pet`,
  },
  {
    id: `05`,
    name: `animal`,
    type: `wild`,
  },
  {
    id: `06`,
    name: `animal`,
    type: null,
  },
  {
    id: `07`,
    name: `food`,
    type: `veg`,
  },
  {
    id: `08`,
    name: `food`,
    type: null,
  },
  {
    id: `09`,
    name: `food`,
    type: null,
  },
  {
    id: `10`,
    name: `fish`,
    type: `tank`,
  },
];

const dict = [];
object.map((value) => {
  const { name, type } = value;
  if (!dict.some((obj) => obj.name === name && obj.type === type)) {
    // Run only if objet with name is not already existed in dict
    dict.push({ name, type });
    console.log(name, type); // For testing
    // functionName(value.name);
  }
});
.as-console-wrapper { max-height: 100% !important; top: 0; }

  • 0
    эй, извините за беспокойство @decpk, но если я хочу проверить как value.name и value.test , мне нужно сделать это ?? if ( !dict.has(value.name) && (value.test))
  • 0
    что такое value.test ? Нет собственности с test .
  • 0
    Ответ обновлен, и вы также можете использовать его для отдельного фильтра, тогда вам не нужно использовать Set . Надеюсь, это именно то, что вы хотите ...
  • 0
    вы можете видеть, что я обновил свой qstn для получения дополнительных разъяснений, так как у меня есть некоторый type name n, но с другим care и извините, я value.type ошибочно набранный value.test поэтому я хочу сохранить значение care, если имя и тип повторяются, как вы сделали для имени, когда он повторял
  • 0
    что, если 2 объекта с одинаковым name , type и care
  • 0
    уход в моей базе данных другой
Codelisting
Популярные категории
На заметку программисту