2016-10-25 3 views
2

할당 빈 배열을 반환 I가 다음 코드 I 제거하는 경우 빈 배열JS 필터 방법은 가변

를 반환

var test1 = [ 
    { 
    id: 1 
    }, 
    { 
    id: 2 
    }, 
    { 
    id: 3 
    }, 
]; 

var test2 = [ 
    { 
    id: 3, 
    text: 'some other text 3' 
    }, 
    { 
    id: 2, 
    text: 'some other text 2' 
    } 
]; 

// filter method 
function getNewArray(val) { 
    test2.filter(function(val2){ 
    if(val.id == val2.id){ 
     return (val2.text); 
     } 
    }); 
} 
var data1 = test1.filter(getNewArray); 

console.log(data1); 

"CONSOLE.LOG (DATA1)에"와 I 코드를 다음과 같이 수정하십시오.

function getNewArray(val) { 
    test2.filter(function(val2){ 
    if(val.id == val2.id){ 
     console.log(val2.text); 
     } 
    }); 
} 

원하는 결과가 나옵니다.

왜 데이터 1이 비어 있습니까?

+0

기능. 나는 이것이 당신의 문제를 해결할지는 모르지만, 당신이 원하는 것은'test2.filter (function (val2) {return val.id == val2.id;})'(또는 람다'test2.filter (val2 => val.id == val2.id)') – Aaron

+0

당신이 얻고 자하는 것이 불투명합니다. 원하는 결과를 추가하십시오. –

+1

필터는 새로운 배열을 반환하기 때문에 현재 배열을 변경하지 않습니다. 당신은 당신의 기능에서 아무것도 돌려주지 않습니다. – epascarello

답변

4

filter() 메서드를 사용할 수 없으며 대신 reduce()forEach()을 사용하고 결과로 배열을 반환 할 수 있습니다. 그것이 유지 또는 여과되어야하는 경우 상기 어레이의 각 요소에 대해 나타내는 부울 값을 반환한다 Array.prototype.filter``로 전달

var test1 = [{ 
 
    id: 1, 
 
    text: 'some text' 
 
}, { 
 
    id: 2, 
 
    text: 'some text 2' 
 
}, { 
 
    id: 3, 
 
    text: 'some text 3' 
 
}, ]; 
 

 
var test2 = [{ 
 
    id: 3, 
 
    text: 'some other text 3' 
 
}, { 
 
    id: 2, 
 
    text: 'some other text 2' 
 
}]; 
 

 
function getNewArray(r, val) { 
 
    test2.forEach(function(val2) { 
 
    if (val.id == val2.id) { 
 
     r.push(val2.text); 
 
    } 
 
    }); 
 
    return r; 
 
} 
 
var data1 = test1.reduce(getNewArray, []); 
 

 
console.log(data1);