Javascript 比较字符串数组和具有字符串属性的数组对象的最佳方法?

Javascript 比较字符串数组和具有字符串属性的数组对象的最佳方法?,javascript,arrays,performance,properties,nested-loops,Javascript,Arrays,Performance,Properties,Nested Loops,我有一个对象数组,在这些对象中有一个name属性 const objArr=[{name:“Avram”},{name:“Andy”}] 我正在从包含名称的外部源收集字符串数组 const strArr=[“Avram”、“Andy”、“Brandon”] 如果strArr包含的字符串在objArr中的对象上不作为属性name存在,我需要创建一个新对象并将其推送到objArr 例如:objArr.push({name:“Brandon”}) 显然,我可以使用嵌套循环,但如果可能的话,我希望避免这

我有一个对象数组,在这些对象中有一个
name
属性

const objArr=[{name:“Avram”},{name:“Andy”}]

我正在从包含名称的外部源收集字符串数组

const strArr=[“Avram”、“Andy”、“Brandon”]

如果
strArr
包含的字符串在
objArr
中的对象上不作为属性
name
存在,我需要创建一个新对象并将其推送到
objArr

例如:
objArr.push({name:“Brandon”})

显然,我可以使用嵌套循环,但如果可能的话,我希望避免这种情况。以编程方式执行此操作的最佳方法是什么

const objArr=[{name:“Avram”},{name:“Andy”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
const names=objArr.map(x=>x.name);
strArr.forEach(str=>{
如果(!name.includes(str)){
objArr.push({name:str});
}
});
控制台日志(objArr)像这样

const objArr=[{name:“Avram”},{name:“Andy”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
const names=objArr.map(x=>x.name);
strArr.forEach(str=>{
如果(!name.includes(str)){
objArr.push({name:str});
}
});
控制台日志(objArr)
函数fillMissing(arr,names){
names.forEach(name=>{//names中的每个名称
if(arr.every(obj=>obj.name!==name)){//如果数组arr中的每个对象obj的名称与此名称不同(此名称在arr中不存在)
arr.push({name});//然后将具有该名称的对象添加到arr
}
});
}
const objArr=[{name:“Avram”},{name:“Andy”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
填充缺失(objArr、strArr);
控制台日志(objArr)
函数fillMissing(arr,names){
names.forEach(name=>{//names中的每个名称
if(arr.every(obj=>obj.name!==name)){//如果数组arr中的每个对象obj的名称与此名称不同(此名称在arr中不存在)
arr.push({name});//然后将具有该名称的对象添加到arr
}
});
}
const objArr=[{name:“Avram”},{name:“Andy”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
填充缺失(objArr、strArr);

控制台日志(objArr)
objArr
映射到与
strArr
相同的结构。然后
concat
2个数组。通过
Set
运行它以删除重复项,然后重新
map
以更正对象数组

const objArr=[{name:“Avram”},{name:“Andy”},{name:“John”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
const res=Array.from(新集合(objArr.map(i=>i.name).concat(strArr))).map(i=>({name:i}))

控制台日志(res)
objArr
映射到与
strArr
相同的结构。然后
concat
2个数组。通过
Set
运行它以删除重复项,然后重新
map
以更正对象数组

const objArr=[{name:“Avram”},{name:“Andy”},{name:“John”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
const res=Array.from(新集合(objArr.map(i=>i.name).concat(strArr))).map(i=>({name:i}))
控制台日志(res)
const objArr=[{name:“Avram”},{name:“Andy”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
const objNamesArr=objArr.map((obj)=>obj.name)
strArr.forEach((ele)=>objNamesArr.indexOf(ele)=-1&&objArr.push({name:ele}))
console.log('objArr',objArr);
console.log('strArr',strArr)
const objArr=[{name:“Avram”},{name:“Andy”}];
const strArr=[“Avram”、“Andy”、“Brandon”];
const objNamesArr=objArr.map((obj)=>obj.name)
strArr.forEach((ele)=>objNamesArr.indexOf(ele)=-1&&objArr.push({name:ele}))
console.log('objArr',objArr);

console.log('strArr',strArr)到目前为止,您拥有的最佳解决方案是什么?我可以想出一个解决方案,包括映射、排序(两次),然后是O(n)来比较两个列表。编辑:或者只是使用一个集合,让哈希处理它?节省排序。到目前为止,您最好的解决方案是什么?我可以想出一个解决方案,包括映射、排序(两次),然后是O(n)来比较两个列表。编辑:或者只是使用一个集合,让哈希处理它?保存排序。