2014-07-09 4 views
1

나는 JSON 배열이있는 경우 : 내가 undefined에서 필터링 할"null"및 "undefined"값에서 중첩 배열을 필터링하는 방법은 무엇입니까?

arrays = 
    [ 
     [ 
     undefined, 
     ",", 
     " ", 
     "simple" 
     ], 
     [ 
     undefined, 
     null, 
     " ", 
     "phrase" 
     ], 
     [ 
     undefined, 
     ",", 
     " ", 
     "one" 
     ], 
     [ 
     undefined, 
     null, 
     " ", 
     "another" 
     ], 
     [ 
     undefined, 
     null, 
     " ", 
     "phrase" 
     ] 
    ] 

null 값 :

arrays.forEach(function(array){array.filter(function(n){return !!n})}); 

또는

arrays.forEach(function(array){array = array.filter(function(n){return !!n})}); 

그러나 어떤없이 동일한 배열을 반환을 변경. 내가 직접 내부 배열 작업하는 경우

그렇지 않으면, 그것은 작동 :

rest_words[0].filter(function(n){return !!n}); 
=> [",", " ", "simple"] 

forEach() 배열을 수정할 수 없습니다? 값으로 만 반복 할 수 있습니까? 배열을 반복하여 수정하는 최적의 솔루션은 무엇입니까?

arrays.forEach(function(array, index){ 
    arrays[index] = array.filter(function(n){return !!n}); 
}); 

답변

4

로컬 array 변수에만 할당하고 실제 arrays 속성에는 쓰지 마세요. 당신은

arrays.forEach(function(array, i, all) { 
    all[i] = array.filter(Boolean); // where all===arrays 
}); 

을 할 수 있지만 새로운 배열을 만들 map을 개시 훨씬 더 위치 :

refinedArrays = arrays.map(function(array) { 
    return array.filter(Boolean); 
}); 
1

를 통해 반복 뭔가 더있다

내가 null를 제외한 모든 값을 유지합니다 n != null 사용
arrays = arrays.map(function(array) { 
    return array.filter(function(n){ return n != null; }); 
}); 

undefined. 반면 !!n""0을 제외합니다.

2

사용 Array.map() : 나는 희망

다음 그냥이 시도 for(i=0, i<arrays.length, i++){arrays[i] = arrays[i].filter(...)}

관련 문제