簡體   English   中英

比較字符串數組和具有字符串屬性的數組對象的最佳方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM