2017-11-24 11 views
1

개체의 배열을 가지고 있는데 그 개체 안에 name 속성이 있습니다.문자열 속성이있는 배열 객체와 문자열 배열을 비교하는 가장 좋은 방법은 무엇입니까?

const objArr = [ { name: "Avram" }, { name: "Andy" } ];

난 이름을 포함한 외부 광원으로부터 문자열의 배열을 회수하고있다. strArrobjArr에서 객체에 속성 name로 존재하지 않는 문자열을 포함하는 경우

const strArr = [ "Avram", "Andy", "Brandon" ];

, 나는 새로운 객체를 생성하고 objArr에 밀어해야합니다. 예를 들어

: 분명히 objArr.push({ name: "Brandon" });

, 내가 중첩 루프를 사용할 수 있지만 가능하면 피하기 싶습니다. 이 작업을 프로그래밍 방식으로 수행하는 가장 좋은 방법은 무엇입니까? strArr 동일 구성이

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);

+0

당신이 지금까지 가지고있는 가장 좋은 방법은 무엇입니까의 배열을 수정 map 재 다음, 중복을 제거하기 위해 Set를 통해 실행? 지도, 정렬 (두 번), 두 개의 목록을 비교하는 O (n)을 포함하는 솔루션을 생각해 볼 수 있습니다. 편집 : 아니면 그냥 세트를 사용하여 해시가 처리하도록 할 수 있습니까? 정렬을 저장합니다. – Shammoo

답변

0

. 그런 다음 concat 2 어레이. 객체

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);

0

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);

0

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);