gpt4 book ai didi

javascript - 在 JavaScript 中创建数组中重复项的映射

转载 作者:行者123 更新时间:2023-12-02 16:51:32 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,该函数创建一个对象并计算数组中每个数字的重复次数。例如,如果我有一个 [1,2,2,2,3,3] 数组,我的函数应该返回 3,因为有两个重复的 2 和一个3 的重复项。所以我写了一个我认为很聪明的函数。我决定创建每个元素的频率映射。通过将每个新属性的创 build 置为 -1,即数组中的唯一编号。由于某种原因,当我这样做时,我得到的属性值全部为零。我从下面的两个函数中得到了两组不同的结果。

function DistinctListV1(arr) { 
var mapping = {};
for(var i = 0; i < arr.length; i++){
if(!mapping[arr[i]]){
mapping[arr[i]] = 0; //Difference here
}
mapping[arr[i]] += 1;
}
return mapping
}


function DistinctListV2(arr) {
var mapping = {};
for(var i = 0; i < arr.length; i++){
if(!mapping[arr[i]]){
mapping[arr[i]] = -1; //Difference here
}
mapping[arr[i]] += 1;
}
return mapping
}


DistinctListV1([1,2,2,3,3,3])
=> { '1': 1, '2': 2, '3': 3 }

DistinctListV2([1,2,2,3,3,3])
=> { '1': 0, '2': 0, '3': 0 }

现在我只关心用这个映射创建一个对象。感谢您的阅读。

编辑:

=> DistinctListV3([1,2,2,3,3,3])

function DistinctListV3(arr) {
var mapping = {};
for(var i = 0; i < arr.length; i++){
if(!mapping[arr[i]]){
mapping[arr[i]] = 100; //Difference here
}
mapping[arr[i]] += 1;
}
return mapping
}

DistinctListV3([1,2,2,3,3,3])

=> { '1': 101, '2': 102, '3': 103 }

使用这个例子,让我相信当我使用 -1 作为开始递增的地方时,正在发生一些事情。

最佳答案

您遇到的问题是由这一行引起的:

if(!mapping[arr[i]]){

我认为您正在期待 if 中的代码仅在 mapping[arr[i]] 时运行尚不存在。但是!运算符不严格:它将返回 true不仅仅是当 mapping[arr[i]]undefined ,而且当mapping[arr[i]]时是任何东西falsy ,例如数字零。当然,当您将变量初始化为 -1 时,就会发生这种情况。然后添加1到它,导致所有映射都卡在 0无限期地(它们一直被设置为 -1 然后递增,这意味着它们回到 0 并且 if 一次又一次地运行,永远不会超过 0 )。

您想要更严格的检查:

if (typeof mapping[arr[i]] === 'undefined') {

或者

if (mapping.hasOwnProperty(arr[i])) {

关于javascript - 在 JavaScript 中创建数组中重复项的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com