gpt4 book ai didi

Javascript 哈希表数据结构。交集与归约

转载 作者:行者123 更新时间:2023-11-29 23:46:39 26 4
gpt4 key购买 nike

问题是当给定的多个数组返回一个包含所有相交数组值的数组时。我已经通读了一些解决方案,并试图理解这个哈希表解决方案。

我无法理解这一行:

a[propName] = a[propName] || {count:0, value: val};   

据我了解,我们正在遍历子数组的每个元素。我们的累加器对象被赋予子数组值的属性名称。

这就是我感到困惑的地方。我们的对象属性的值为 a[propName]。我不明白这个值(value)。我的理解是我们应该让我们的对象属性成为我们子数组的值(将 a[propName]=a[propName] 行改为 a[propName]=propName )但是当我这样做时,我们无法计算该属性发生了多少次。我不明白为什么我们必须放置 a[propName] 以及我们访问的数据结构与仅使用 propName 不同。显然存在差异,因为当我使用 a[propName] 时,我们能够计算该属性出现了多少次。如果有人能彻底解释发生了什么,我将不胜感激。

function intersection(){
// convert arguments to array of arrays
var arrays = [].slice.call(arguments);
// create an object that tracks counts of instances and is type specific
// so numbers and strings would not be counted as same
var counts= arrays.reduce(function(a,c){
// iterate sub array and count element instances
c.forEach(function(val){
var propName = typeof val + '|' + val;
// if array value not previously encountered add a new property
a[propName] = a[propName] || {count:0, value: val};
// increment count for that property
a[propName].count++;
console.log(a);
});
return a;
},{});

// iterate above object to return array of values where count matches total arrays length
return Object.keys(counts).reduce(function(resArr, propName){
if(counts[propName].count === arrays.length){
resArr.push(counts[propName].value);
}
return resArr;
},[]);

}

最佳答案

您指向的行检查 a[propName] 是否存在,如果不存在(因此它是 undefined),则将其初始化为 {count :0, 值: val};.

让我们仔细看看。

首先,让我们使用更有意义的名称。 aaccumulator,您用来跟踪一切的变量。

一开始,它是一个空对象。

c.forEach 的第一次迭代中,它没有任何属性。

因此,给定一个像 'string|asd' 这样的 propName,它会添加它的第一个属性,并且 accumulator 变成 accumulator = {'string|asd' : {count:0, value: val}};.

然后增加count的值。

如果它找到另一个 'string|asd' 它只会增加计数,因为检查 a[propName] = a[propName] || {count:0, value: val}; 只会保留 prop。

let a = {}

// a.c does not exist, therefore is undefined
console.log(a.c)

a.c = a.b || 1;
// a.c now is 1
console.log(a.c)

a.c = a.c || 2;
// a.c is still 1, because the `or` operator returns as soon as it finds a valid value
console.log(a.c)

关于Javascript 哈希表数据结构。交集与归约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43768346/

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