2016-07-07 2 views
2

몇 가지 맵 기능을 시도했지만 내가 원하는 것을 얻을 수있는 적절한 방법을 찾을 수 없습니다. 다음은 그 경우입니다.배열 개체 및 해당 속성을 배열로 변환

Object {Results:Array[3]} 
    Results:Array[3] 
     [0-2] 
      0:Object 
        id=null  
        name: "Rick" 
        upper:"0.67" 
      1:Object 
        id="00379321"  
        name:null 
        upper:"0.46" 
      2:Object 
        id="00323113"  
        name:null 
        upper:null 

최종 결과가 이렇게 보이기를 바랍니다. 모든 null 값을 제거하고 모든 항목을 오브젝트에서 이렇게 묶었 으면합니다.

var finalResult = ["Rick","0.67","00379321","0.46","00323113"]; 

이 결과를 얻으려면 어떻게해야합니까?

답변

2

개체의 속성에 순서가없고 순서가 적절하기 때문에 키에 고정 된 배열을 사용하는 것이 좋습니다. @의 안드레이의 코드

var data = [{ id: null, name: "Rick", upper: "0.67" }, { id: "00379321", name: null, upper: "0.46" }, { id: "00323113", name: null, upper: null }], 
 
    result = []; 
 

 
data.forEach(function (a) { 
 
    ['id', 'name', 'upper'].forEach(function (k) { 
 
     if (a[k] !== null) { 
 
      result.push(a[k]); 
 
     } 
 
    }); 
 
}); 
 

 
console.log(result);

+0

그것은 data.forEach가 함수가 아니란 것을 알리는 오류를 낳습니다. – Patrick

+0

어떤 사용자 에이전트를 사용합니까? –

+0

사용자 에이전트에 의해 당신을 얻지 않았다 – Patrick

3
_.chain(a) 
.map(function(x) {return _.values(x)}) 
.flatten() 
.filter(function(x) {return x != null;}) 
.value() 
+0

@ andrey- 내가 이것을 사용할 때 구문 오류가 발생합니다. – Patrick

+0

예제 코드의 "null"값은 실제로 'null'이 아니라 오히려 문자열입니다. 또한 일반적으로 코드에 대한 설명을 제공하는 것이 좋습니다. 특히 라이브러리에 익숙하지 않은 사람들에게 유용합니다. –

+0

@ 패트릭 업데이트 – Andrey

3

작은 수정은 다른 밑줄 솔루션과 유사한

var a = [{id:null, name: "Rick", upper:"0.67"}, {id:"00379321", name:null, upper:"0.46"}, {id: "00323113",name:null, upper:null}] 
_(a) 
.map(function(x) {return _.values(x)}) 
.flatten() 
.without(null) 
.value() 
+0

사과드립니다. 콘솔의 입력은 이전에 언급했던 와트와 조금 다릅니다. 제발 내 모습을보고 알려주세요. – Patrick

+0

답을 업데이트했습니다. 배열에서 다른 데이터를 사용했습니다. 이제는 동일한 데이터를 포함하고 그 결과는 같습니다. –

1

또 다른 밑줄 솔루션 (lodash.js 필요)하지만 rejectisNull 술어를 사용 :

var result = _.chain(data) 
    .map(_.values) 
    .flatten() 
    .reject(_.isNull) 
    .value();