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)