Javascript 查找出现两次的值
我有一个目标:Javascript 查找出现两次的值,javascript,Javascript,我有一个目标: [{ id: 'foo', name: 'apple', type: 'fruit' }, { id: 'bar', name: 'banana', type: 'fruit' }, { id:'baz', name: 'carrot', type: 'vegetable' } ]; 我想知道哪种类型已经发生过两次了。例如,在这种情况下,水
[{
id: 'foo',
name: 'apple',
type: 'fruit'
},
{
id: 'bar',
name: 'banana',
type: 'fruit'
},
{ id:'baz',
name: 'carrot',
type: 'vegetable'
}
];
我想知道哪种类型已经发生过两次了。例如,在这种情况下,水果将在该对象中出现两次
到目前为止,我已经设置了这段代码,但它只会导致值出现一次而不是两次,我不知道为什么
尝试:
let map = new Map();
for(let i=0; i < obj.length; i++){
if(map.hasOwnProperty(obj[i].type))
{
map.set(obj[i].type, map.get(obj[i].type) +1);
}
else
{
map.set(obj[i].type, 1);
}
}
let keys = Object.keys(map).filter(k=>map[k] === 2);
let map=new map();
for(设i=0;imap[k]==2);
其中obj是上面的对象。keys返回一个空数组,map只是将上面的类型映射为1
不知道为什么没有正确计算发生率 你需要使用适当的方法
- 要得到你需要使用的钥匙
- 检查存在和使用
let obj=[{id:'foo',name:'apple',type:'fruit'},{id:'bar',name:'banana',type:'fruit'},{id:'baz',name:'carrot',type:'vegeture'}];
设map=newmap();
for(设i=0;imap.get(k)==2);
console.log(键)
您需要使用正确的方法
- 要得到你需要使用的钥匙
- 检查存在和使用
let obj=[{id:'foo',name:'apple',type:'fruit'},{id:'bar',name:'banana',type:'fruit'},{id:'baz',name:'carrot',type:'vegeture'}];
设map=newmap();
for(设i=0;imap.get(k)==2);
console.log(keys)
我认为@code Maniac正确回答了您的问题。您正在使用hasOwnProperty
而不是Map.has
和Map[k]
而不是`Map.get(k)
此外,代码返回Map{“fruit”=>1,“vegeture”=>1}
的原因是hasOwnProperty
不是Map
方法,而是一个Object
方法,用于检查该对象中是否存在具有键的属性。在您的情况下,由于要使用map.set
添加到映射中,因此没有添加对象属性,这意味着if
条件总是返回false,使代码在映射中过度写入值
如果要使用hasOwnProperty
,则需要将映射
更改为常规的对象
,而不是映射
。(我的意思是,您可能也可以将Map
用作常规的对象,但这只是因为JS非常灵活。不推荐使用)
let obj=[{id:'foo',name:'apple',type:'fruit'},{id:'bar',name:'banana',type:'fruit'},{id:'baz',name:'carrot',type:'vegeture'}];
设map={};
for(设i=0;imap[k]==2);
console.log(键)
我认为@code Maniac正确回答了你的问题。您正在使用hasOwnProperty
而不是Map.has
和Map[k]
而不是`Map.get(k)
此外,代码返回Map{“fruit”=>1,“vegeture”=>1}
的原因是hasOwnProperty
不是Map
方法,而是一个Object
方法,用于检查该对象中是否存在具有键的属性。在您的情况下,由于要使用map.set
添加到映射中,因此没有添加对象属性,这意味着if
条件总是返回false,使代码在映射中过度写入值
如果要使用hasOwnProperty
,则需要将映射
更改为常规的对象
,而不是映射
。(我的意思是,您可能也可以将Map
用作常规的对象,但这只是因为JS非常灵活。不推荐使用)
let obj=[{id:'foo',name:'apple',type:'fruit'},{id:'bar',name:'banana',type:'fruit'},{id:'baz',name:'carrot',type:'vegeture'}];
设map={};
for(设i=0;imap[k]==2);
console.log(键)
如果要将地图用作对象,则必须更改一些内容,因为新建地图()
不会创建对象文字。此外,对象没有设置
和获取
,因此不能混合使用对象和映射
对象的匹配函数。看
让obj=[{
id:“foo”,
名称:“苹果”,
类型:“水果”,
},
{
id:“酒吧”,
名称:“香蕉”,
类型:“水果”,
},
{
id:“baz”,
名称:“胡萝卜”,
类型:“蔬菜”
},
];
设map={};
for(设i=0;imap[k]==2);
console.log(keys)
如果要将地图用作对象,则必须更改一些内容,因为新建地图()
不会创建对象文字。此外,对象没有设置
和获取
,因此不能混合使用对象和映射
对象的匹配函数。看
让obj=[{
id:“foo”,
名称:“苹果”,
类型:“水果”,
},
{
id:“酒吧”,
名称:“香蕉”,
类型:“水果”,
},
{
id:“baz”,
名称:“胡萝卜”,
类型:“蔬菜”
},
];
设map={};
F
let obj = [{id: 'foo',name: 'apple',type: 'fruit'},{id: 'bar',name: 'banana',type: 'fruit'},{id: 'baz',name: 'carrot',type: 'vegetable'}];
let map = {};
for (let i = 0; i < obj.length; i++) {
if (map.hasOwnProperty(obj[i].type)) {
map[obj[i].type] = map[obj[i].type] + 1;
} else {
map[obj[i].type] = 1;
}
}
let keys = Object.keys(map).filter(k=>map[k] === 2);
console.log(keys)