提问者:小点点

是否根据JS中的用户参数删除重复的元素?


我尝试删除多个类别中的重复词。为此,我有一个名为users的对象,其中包含user发送的单词。

我使用了一个新的对象,它包含在字典中找到的单词及其类别。

null

const Themes = {
    Animals: [
        'ZOE',
        'ZEBRA'
    ],
    Names: [
        'ZOE'
    ]
}

let users = []
let increment = 0
let copyArr = []

checkProposition()

function checkProposition() {
  users.push({
    id: '1',
    words: ['ZOE', 'ZEBRA'],
    score: 0
  })
  users.forEach(user => {
    copyArr.push({
      id: user.id,
      wordsFound: [],
      saveCategory: []
    })
    user.words.forEach(word => {
      algorithmCore(word)
    })
    increment++
  })
  console.log(copyArr)
}

function algorithmCore(word) {
  for (var key in Themes) {
    for (var answer in Themes[key]) {
      if (word == Themes[key][answer]) {
        copyArr[increment].wordsFound.push(word)
        copyArr[increment].saveCategory.push(key)
      }
    }
  }
  return
}

null

输出复制rn

{ id: '1', wordsFound: [ 'ZOE', 'ZOE', 'ZEBRA' ], saveCategory: [ 'Animals', 'Names', 'Animals' ]}

预期产出:

{ id: '1', wordsFound: [ 'ZOE', 'ZEBRA' ], saveCategory: [ 'Names', 'Animals' ]}

应该是:ZOE(名字)ZEBRA(动物)

如果用户发送:

users.push({
    id: '1',
    words: ['ZOE', 'ZOE'],
    score: 0
})

应该是:

{ id: '1', wordsFound: [ 'ZOE', 'ZOE' ], saveCategory: [ 'Names', 'Animals' ]}

但如果用户发送:

users.push({
    id: '1',
    words: ['ZOE', 'ZOE', 'ZEBRA'],
    score: 0
})

应该是:

{ id: '1', wordsFound: [ 'ZOE', 'ZOE' ], saveCategory: [ 'Names', 'Animals' ]}
or
{ id: '1', wordsFound: [ 'ZOE', 'ZEBRA' ], saveCategory: [ 'Names', 'Animals' ]}

共1个答案

匿名用户

null

const Themes = {
    Animals: [
        'ZOE',
        'ZEBRA'
    ],
    Names: [
        'ZOE'
    ]
}

let users = []
let increment = 0
let copyArr = []
let usedAnswers=[];

checkProposition()

function checkProposition() {
users.push({
    id: '1',
    words: ['ZOE', 'ZOE','ZEBRA'],
    score: 0
})
  users.forEach(user => {
    usedAnswers[increment]=[]
    copyArr.push({
      id: user.id,
      wordsFound: [],
      saveCategory: []
    })
    user.words.forEach(word => {
      algorithmCore(word,usedAnswers[increment])
    })
    increment++
  })
  console.log(copyArr)
}

function algorithmCore(word, used) {
  let wordAdded = false;

  for (var key in Themes) {
    for (var answer in Themes[key]) {
      const wordKey=`${word}(${key})`;
      if (word == Themes[key][answer] && !wordAdded && !used.includes(wordKey)) {
        wordAdded = true;
        used.push(wordKey)
        copyArr[increment].wordsFound.push(word)
        copyArr[increment].saveCategory.push(key)
      }
    }
  }
  return
}