Javascript:检测对象数组中两个键组合的最佳方法是什么

时间:2017-06-27 02:36:16

标签: javascript arrays object

让我们说:

var person = [
    {"classKey": 1, "teacherKey": 1},
    {"classKey": 2, "teacherKey": 1},
    {"classKey": 2, "teacherKey": 1}
]  

如何防止添加重复记录,甚至如何删除重复的组合对?

谢谢

1 个答案:

答案 0 :(得分:3)

您要做的主要是唯一标识每个条目。

一种非常快速的方法是将值连接成分隔的字符串,例如

let key = [entry.classKey, entry.teacherKey].join(':')

然后,您可以使用它来跟踪现有条目和filter the array。例如,使用Set ...

const person = [
    {"classKey": 1, "teacherKey": 1},
    {"classKey": 2, "teacherKey": 1},
    {"classKey": 2, "teacherKey": 1}
]

const filtered = person.filter(function(entry) {
  let key = [entry.classKey, entry.teacherKey].join(':')
  return !this.has(key) && !!this.add(key)
}, new Set())

console.info(filtered)

我正在使用一些布尔短路来保持简短但如果它有助于解释发生了什么,它就像这样工作

if (set.has(key)) {
  return false // filter out the duplicate value
} else {
  set.add(key) // record the key
  return true // keep this value
}

如果您不热衷于使用Set(可能由于浏览器兼容性),您可以使用普通对象跟踪

const filtered = person.filter(function(entry) {
  let key = [entry.classKey, entry.teacherKey].join(':')
  return !this[key] && (this[key] = true)
}, Object.create(null))