使用原型识别 JavaScript 数组中的重复项
在 JavaScript 中,通常需要从数组中删除重复值。一种流行的方法是使用自定义“getUnique”函数扩展数组原型,如下所示:
Array.prototype.getUnique = function() { var o = {}, a = [], i, e; for (i = 0; e = this[i]; i++) {o[e] = 1}; for (e in o) {a.push (e)}; return a; }
但是,当数组包含零值时,此脚本会遇到问题。要理解原因,让我们详细检查一下问题。
“getUnique”函数利用对象“o”作为值的临时存储。这对于可以用作对象键的值非常有效,例如字符串或除零之外的数字。但是,JavaScript 将数字零 ('0') 视为虚假值,这意味着 'o[0]' 的计算结果为 'false'。
迭代对象键时,会跳过虚假值,从而导致从生成的唯一数组中省略零。此行为与预期操作不同,预期操作将零视为有效的唯一值。
带过滤器的本机解决方案
在现代 JavaScript 环境(ES5 及更高版本)中,使用“filter”方法可以提供更简洁、更高效的方法:
function onlyUnique(value, index, array) { return array.indexOf(value) === index; } // usage example: var a = ['a', 1, 'a', 2, '1']; var unique = a.filter(onlyUnique); console.log(unique); // ['a', 1, 2, '1']
“filter”方法采用一个回调函数,对于要包含在新数组中的每个唯一元素返回“true”。在这种情况下,我们的回调检查数组中当前元素的索引是否与其在回调中的位置匹配,从而确认其唯一性。这种方法不依赖于对象键并正确处理零值。
以上是如何有效地从 JavaScript 数组中删除重复值(包括零)?的详细内容。更多信息请关注PHP中文网其他相关文章!