Javascript 如何查找数组中出现的对象
我需要知道一个对象数组中是否至少包含两个相同的对象(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
// 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'}
,而不仅仅是第一个的索引。