Javascript 如何查找数组中出现的对象

Javascript 如何查找数组中出现的对象,javascript,arrays,object,Javascript,Arrays,Object,我需要知道一个对象数组中是否至少包含两个相同的对象(JavaScript) 我有一个表单,允许人们创建问题(标题、描述、类型、答案选项)。我需要检查用户是否使用同一标签输入了多个答案选项。它们存储在一个数组中 // The array of answer options let array = [{value: 'a'}, {value: 'b'}, {value: 'c'}, {value: 'a'}] 我尝试使用array.indexOf({value:'a'})和array.lastIn

我需要知道一个对象数组中是否至少包含两个相同的对象(JavaScript)

我有一个表单,允许人们创建问题(标题、描述、类型、答案选项)。我需要检查用户是否使用同一标签输入了多个答案选项。它们存储在一个数组中

// The array of answer options
let array = [{value: 'a'}, {value: 'b'}, {value: 'c'}, {value: 'a'}]
我尝试使用
array.indexOf({value:'a'})
array.lastIndexOf({value:'a'})
,但它们都给我一个-1的索引。

使用:

let数组=[{value:'a'},{value:'b'},{value:'c'},{value:'a'}];
const index=array.findIndex(({value})=>value==“a”);
控制台日志(索引)使用:

let数组=[{value:'a'},{value:'b'},{value:'c'},{value:'a'}];
const index=array.findIndex(({value})=>value==“a”);

控制台日志(索引)不同的对象之间永远不会相互关联,因此您必须使用不同的方法。一个选项是创建一组字符串化对象,并在找到任何重复字符串后返回true:

const hasDupes=(arr)=>{
常量字符串=新集合();
用于(arr的常量对象){
const string=JSON.stringify(obj);
if(strings.has(string)){
返回true;
}
字符串。添加(字符串);
}
返回false;
};
log(hasDupes([{value:'a'},{value:'b'},{value:'c'},{value:'a'}]);

log(hasDupes([{value:'a'},{value:'b'},{value:'c'}])不同的对象之间永远不会相互关联,因此您必须使用不同的方法。一个选项是创建一组字符串化对象,并在找到任何重复字符串后返回true:

const hasDupes=(arr)=>{
常量字符串=新集合();
用于(arr的常量对象){
const string=JSON.stringify(obj);
if(strings.has(string)){
返回true;
}
字符串。添加(字符串);
}
返回false;
};
log(hasDupes([{value:'a'},{value:'b'},{value:'c'},{value:'a'}]);

log(hasDupes([{value:'a'},{value:'b'},{value:'c'}])indexOf将返回对象的实例

{value: 'a'} !== {value: 'a'};
因为它们都是对象的不同实例

你可以找到这个物体

const obj = array.find(item => item.value === 'a')

indexOf将返回对象的实例

{value: 'a'} !== {value: 'a'};
因为它们都是对象的不同实例

你可以找到这个物体

const obj = array.find(item => item.value === 'a')

如果您只关心
属性,并且您的用例并不复杂,您只需通过以下一行操作即可:

let hasDupes=arr=>new Set(arr.map(x=>x.value)).size!==棱长
log(hasDupes([{value:'a'},{value:'b'},{value:'c'},{value:'a'}]))

log(hasDupes([{value:'a'},{value:'b'},{value:'c'}])
如果您只关心
value
属性,并且您的用例并不复杂,您可以通过以下方式在一行中完成此操作:

let hasDupes=arr=>new Set(arr.map(x=>x.value)).size!==棱长
log(hasDupes([{value:'a'},{value:'b'},{value:'c'},{value:'a'}]))

log(hasDupes([{value:'a'},{value:'b'},{value:'c'}]))
您可以使用lodash.js来比较两个对象。 请看下面的样品

let array = [{ value: "a" }, { value: "b" }, { value: "c" }, { value: "a" }];

const object = { value: "a" };

countObjOccurrences = object => {
  let occurances = 0;
  array.map(item => {
    if (_.isEqual(item, object)) {
      occurances += 1;
    }
  });
  return occurances;
};

此函数将返回2。

您可以使用lodash.js比较两个对象。 请看下面的样品

let array = [{ value: "a" }, { value: "b" }, { value: "c" }, { value: "a" }];

const object = { value: "a" };

countObjOccurrences = object => {
  let occurances = 0;
  array.map(item => {
    if (_.isEqual(item, object)) {
      occurances += 1;
    }
  });
  return occurances;
};

此函数将返回2。

这将为我提供第一次出现的索引,对吗?我想知道是否有多个
{value:'a'}
,而不仅仅是第一个的索引。这给了我第一次出现的索引,对吗?我想知道是否有多个
{value:'a'}
,而不仅仅是第一个的索引。