Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Map-JavaScript创建频率映射_Javascript_Arrays_Object_Frequency - Fatal编程技术网

使用Map-JavaScript创建频率映射

使用Map-JavaScript创建频率映射,javascript,arrays,object,frequency,Javascript,Arrays,Object,Frequency,试图解决这个问题 给定一个数组,找到该数组中的重复项,并返回这些重复项的新数组。返回数组的元素应该按照它们第一次作为副本出现时的顺序出现 示例: [1, 2, 4, 4, 3, 3, 1, 5, 3, '5'] ==> [4, 3, 1] [0, 1, 2, 3, 4, 5] ==> [] 我有: 功能重复(arr){ arr.sort((值,索引)=>值-索引); 设重复项=[]; for(设i=0;i 重复项。indexOf(值)=索引);

试图解决这个问题

给定一个数组,找到该数组中的重复项,并返回这些重复项的新数组。返回数组的元素应该按照它们第一次作为副本出现时的顺序出现

示例:

[1, 2, 4, 4, 3, 3, 1, 5, 3, '5']  ==>  [4, 3, 1]
[0, 1, 2, 3, 4, 5]                ==>  []
我有:

功能重复(arr){
arr.sort((值,索引)=>值-索引);
设重复项=[];
for(设i=0;i
重复项。indexOf(值)=索引);
返回副本;
}

log(重复的([1,2,4,4,3,1,5,5'])可能不是最有效的解决方案,但它解决了这个难题。注意,我使用js
object
来模拟地图

功能重复(arr){
//TODO:从arr返回重复的数组
常量映射={};
常量dup={};
用于(arr的常数){
让key=val;
if(typeof val=='string'){
key=`${val}\u str`;
}
if(映射[键]){
dup[val]=真;
}否则{
map[key]=true;
}
}
返回对象键(dup)
.map(d=>(!Number.isInteger(parseInt(d)))?d:Number(d));
}

log(重复的([1,2,4,4,3,1,5,5'])可能不是最有效的解决方案,但它解决了这个难题。注意,我使用js
object
来模拟地图

功能重复(arr){
//TODO:从arr返回重复的数组
常量映射={};
常量dup={};
用于(arr的常数){
让key=val;
if(typeof val=='string'){
key=`${val}\u str`;
}
if(映射[键]){
dup[val]=真;
}否则{
map[key]=true;
}
}
返回对象键(dup)
.map(d=>(!Number.isInteger(parseInt(d)))?d:Number(d));
}

log(重复的([1,2,4,4,3,1,5,5'])以下是一个可行的想法:

创建(映射键区分类型,因此
5
“5”
是不同的键)

使用筛选器浏览数组中的项。当你浏览地图时,记下你在地图上看到一个项目的次数。仅当计数(在增加计数之前)为
1
时,才从筛选器返回
true
。这是你第二次看到那东西了

过滤器应返回您的答案:

功能重复(arr){
让计数=新映射()
返回arr.filter(n=>{
let count=counts.get(n)
计数。设置(n,计数?计数+1:1)
返回计数===1
})
}

log(重复的([1,2,4,4,3,1,5,5'])以下是一个可行的想法:

创建(映射键区分类型,因此
5
“5”
是不同的键)

使用筛选器浏览数组中的项。当你浏览地图时,记下你在地图上看到一个项目的次数。仅当计数(在增加计数之前)为
1
时,才从筛选器返回
true
。这是你第二次看到那东西了

过滤器应返回您的答案:

功能重复(arr){
让计数=新映射()
返回arr.filter(n=>{
let count=counts.get(n)
计数。设置(n,计数?计数+1:1)
返回计数===1
})
}

log(重复的([1,2,4,4,3,1,5,5'])假设我的响应是对象数组:-

评估类型:(13)[{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…}] 扩展后,你可以到下面

解决方案:


让我们假设我的响应是对象数组:-

评估类型:(13)[{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…},{…}] 扩展后,你可以到下面

解决方案:


说明中说:
返回数组的元素应该按照它们第一次作为重复项出现时的顺序出现。
但是你要做的第一件事是通过对数组排序来丢弃这些信息。我现在记得我为什么要排序了-我曾尝试创建一个frequencyMap,但它将5和“5”作为同一个值,这也是违反规则的。使用对象而不是对象来计数。它区分键的类型。@MarkMeyer right,这是我不理解的-我如何使用
Map
来计数?说明中说:
返回数组的元素应该按照它们第一次作为重复项出现时的顺序出现。
但是你要做的第一件事是通过对数组排序来丢弃这些信息。我现在记得我为什么排序了-我曾经尝试创建过一个frequencyMap,但它将5和“5”计算为同一事物,这也是违反规则的。使用a而不是对象来保持计数。它区分键的类型。@MarkMeyer对,这是我不理解的-我如何使用
Map
保持计数?也就是说,在Map中设置键
n
。如果
count
为“truthy”(已定义、非零等),则新值将为count+1。否则将其设置为1。也就是说,在地图中设置键
n
。如果
count
为“truthy”(已定义、非零等),则新值将为count+1。否则将其设置为1。
  const [assessmentType, setassessmentType] = useState([]);
  let assessmentCountMap = new Map();

  setassessmentType(response.data.body["assessment_type"]);

  assessmentType.forEach((obj) => {
      assessmentCountMap.set(
        obj["assessment_type"],
        (assessmentCountMap.get(obj["assessment_type"]) || 0) + 1
      );
    });