Добавление уникальных элементов в массив условно внутри функции ReactJS - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть приложение реагирования, где к комментарию могут быть прикреплены смайлики.

Я сделал функцию, которая создает массив смайликов и устанавливает их в состояние.

Каждый объект смайликов имеет идентификатор (имя смайлика), количество (сколько раз он был добавлен) и автора (имя пользователя, если пользователь добавил смайлики.

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

addEmoji = (newEmoji) =>{
// mark if new emoji is already in the array or not
let containsNewEmoji = false;

// recreate emojis array
let newEmojis = this.state.emojis.map(emoji => {

  // if emoji already there, simply increment count
  if (emoji.id === newEmoji.id) {

    if([...emoji.authors].indexOf(this.props.comment.author.name)){ // here I'm making a conditional check to see, of the author already is added

    }

containsNewEmoji = true;
return { 
  ...newEmoji,
  ...emoji,
  count: emoji.count + 1,
  authors: [...emoji.authors, this.props.comment.author.name]
};

}

но должен ли я возвращать все остальное снова

  return { 
  ...newEmoji,
  ...emoji,
  count: emoji.count + 1,
  authors: [...emoji.authors]
};

}

это кажется избыточным, можно ли улучшить эту логику?

РЕДАКТИРОВАТЬ: моя идея или решение до сих пор состоит в том, чтобы сделать еще одно определение, где я возвращаю только массив, из этогоявляется повторяющимся элементом авторов внутри массива:

  if (emoji.id === newEmoji.id) {

let author = this.props.comment.author.name;
if([...emoji.authors].indexOf(author) !== -1){
  containsNewEmoji = true;
  return { 
    ...emoji,
    count: emoji.count + 1,
    authors: [...emoji.authors]
  };
}
containsNewEmoji = true;
return { 
  ...emoji,
  count: emoji.count + 1,
  authors: [...emoji.authors, author]
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...