2016-09-01 2 views
3

그래서 개체 배열이 있고 개체가 비어있을 때 개체의 속성을 잘라내고 싶습니다. 예를 들어배열에있는 객체의 빈 속성을 접합하는 방법은 무엇입니까?

:

var quotes = [ 
{ 
    quote: "Bolshevism is not a policy; it is a disease. It is not a creed; it is a pestilence.", 
    source: "Winston Churchill", 
    citation: "", 
    year: "29 May 1919", 
    place: "" 
}, 
{ 
    quote: "Learn while you live", 
    source: "", 
    citation: "X", 
    year: "1950", 
    place: "" 
}]; 

나는 무작위로 빈 개체 이름이 같은 개체의 목록을 가지고있다.

비어 있지 않은 속성 만 페이지에 인쇄하고 싶습니다.

그래서 내가) (빈 특성을 같이 IndexOf를 찾아서 스플 라이스하기 위해 개체를 통해 루프를 시도하고있다 :

+0

개체에 순서가 없으므로 오프셋으로 조각을 잘라내는 것은 꽤 무의미합니다. – deceze

+0

이 예제 데이터의 경우 정확히 결과는 무엇입니까? – Cerbrus

답변

5

스플 라이스가 배열에 사용되는 당신의 도움에 대한

function findEmptyProp(quotes) { 
    for (prop in quotes) { 
    if(quotes[i].children === '') { 
     return indexOf(quotes[i]); 
     quotes.splice(i, 1); 
}}} 

감사합니다,하지만 때 당신이 물건을 다루는다면 delete을 써야합니다.

당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

var quotes = [{ 
 
    quote: "Bolshevism is not a policy; it is a disease. It is not a creed; it is a pestilence.", 
 
    source: "Wyston Churchill", 
 
    citation: "", 
 
    year: "29 May 1919", 
 
    place: "" 
 
}, { 
 
    quote: "Learn while you live", 
 
    source: "", 
 
    citation: "X", 
 
    year: "1950", 
 
    place: "" 
 
}]; 
 

 
quotes.forEach(function(o){ 
 
    for (var k in o){ 
 
    if(o.hasOwnProperty(k) && isEmpty(o[k])){ 
 
     delete o[k]; 
 
    } 
 
    } 
 
}); 
 

 
function isEmpty(val){ 
 
    return val === undefined || 
 
    val === null || 
 
    (typeof(val) === "object" && Object.keys(val).length === 0) || 
 
    (typeof(val) === "string" && val.trim().length === 0) 
 
} 
 

 
console.log(quotes)

가로서 나는 값이 비어있는 것으로 간주 할 수 있습니다 다른 경우에 대한 처리를 추가 한, deceze 댓글을 달았습니다. 또한 자신의 속성을 업데이트하려면 hasOwnProperty을 확인해야합니다.

+0

문자열 ('trim()'이 실패하고'hasOwnProperty'가 아닌 다른 값의 가능성을 고려하고 싶을 수도 있습니다. 그러나 맞습니다. – deceze

+0

@deceze 다른 빈 경우에 대한 처리를 추가하려고했습니다. 감사합니다 – Rajesh

+0

완벽! 내가 필요한 것! – delano

2

참고 : Object.keys(obj)을 사용하면 당연히 개체의 키 배열을 반환합니다. 예 : ...

var arrayOfObjects = [ 
    { 
    prop1: '1', 
    prop2: '2', 
    prop3: '' 
    }, 
    { 
    prop1: '1', 
    prop2: '', 
    prop3: '3' 
    }, 
    { 
    prop1: '', 
    prop2: '2', 
    prop3: '3' 
    } 
]; 

arrayOfObjects.forEach(function(obj) { 
    /* 'obj' = each object in 'arrayOfObjects' */ 
    Object.keys(obj).forEach(function(key) { 
     /* 'key' = each key in 'obj' */ 
     if (obj[key] === '') delete obj[key]; 
    }); 
}); 

/* test arrayOfObjects */ 
arrayOfObjects.forEach(function(obj) { 
    console.debug(obj); 
}); 

/** => 
    Object { prop1: "1", prop2: "2" } 
    Object { prop1: "1", prop3: "3" } 
    Object { prop2: "2", prop3: "3" } 
**/ 

사용 배열 함수 객체에 .forEach(), .filter(), .sort(), .reduce().map() 등처럼 정말 편리 할 수 ​​있습니다.

+0

입력 해 주셔서 감사합니다. 대단히 감사드립니다! – delano

관련 문제