[英]Best way to compare an array of strings to an array objects with string properties?
我有一个对象数组,在这些对象内是一个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 => { if (! names.includes(str) ) { objArr.push({name: str}); } }); console.log(objArr);
function fillMissing(arr, names) { names.forEach(name => { // for each name in names if(arr.every(obj => obj.name !== name)) { // if every object obj in the array arr has a name diferent than this name (this name doesn't exist in arr) arr.push({name}); // then add an object with that name to arr } }); } const objArr = [ { name: "Avram" }, { name: "Andy" } ]; const strArr = [ "Avram", "Andy", "Brandon" ]; fillMissing(objArr, strArr); console.log(objArr);
Map
objArr
以相同的结构strArr
。 然后concat
两个数组。 通过Set
运行它以删除重复项,然后重新map
到正确的对象数组
const objArr = [ { name: "Avram" }, { name: "Andy" }, { name: "John"} ]; const strArr = [ "Avram", "Andy", "Brandon" ]; const res = Array.from(new Set(objArr.map(i=>i.name).concat(strArr))).map(i=>({name:i})) console.log(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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.