2016-10-28 3 views
0
var obj = { 
a: [1, 3, 4], 
b: 2, 
c: ['hi', 'there'] 
    } 
    removeArrayValues(obj); 
    console.log(obj); // --> { b: 2 } 

에서 배열 값을 제거하는 방법 내 코드입니다 :객체 여기

function removeArrayValues(obj) { 
for (var key in obj){ 
if (Array.isArray(obj[key])) delete obj[key] 
//return obj[key] -> {b: 2, c: ["hi", "there"]} 
} 
return obj[key] 
} 

는 왜 돌아 않는 경우에만 obj["a"]obj["c"] 나는 for/in loop하지 obj["k"] 내부에 반환 할 때. 이 문제를 게시하기 직전에 문제를 파악했지만 배열과 객체 모두에서이 문제를 많이 겪었으며 여기에서 무슨 일이 일어나고 있는지에 대한 설명을 사용할 수 있습니다.

+1

당신이 이해하지 못했던 것이 명확하지 않습니다. if는 "true", "false"및 "true"를 반환합니다. –

+1

* "이 아니라 obj ["k "]"* - 여기서 묻고있는''k ''는 어디에서 왔습니까? 주석 처리 된 행에 따라 루프 내부에'return' 문 *이있는 경우 루프를 완료하지 않고 함수를 즉시 종료합니다. 루프가 마지막 항목을 제거한 후에'obj [key]'가 정의되지 않았기 때문에 함수의'return' 값은'undefined'가됩니다. – nnnnnn

+0

내가 볼 수있는 것은 array의 값을 포함하고있는 모든 객체 키를 성공적으로 제거했다는 것입니다. 다시 질문은 무엇입니까? – choz

답변

2

먼저 자신의 개체를 봅니다.

if (Array.isArray(obj[key])) 

그 조건이 true "반환합니다 값으로 배열을 가지고 그 객체의 각 키, 당신의 removeArrayValues 기능은 그 중 삭제를 들어

var obj = { 
    a: [1, 3, 4],//the value here is an array 
    b: 2,//the value here is not an array 
    c: ['hi', 'there']//the value here is an array 
}; 

: 그것은 3 키/값 쌍을 가지고 "값이 배열 인 경우. 이 데모에서 확인 가능 다음 console.logfor 루프 내에서, "true"를 "거짓"과 "true"로 기록합니다

var obj = { 
 
a: [1, 3, 4], 
 
b: 2, 
 
c: ['hi', 'there'] 
 
    } 
 
    removeArrayValues(obj); 
 

 
function removeArrayValues(obj) { 
 
for (var key in obj){ 
 
console.log(Array.isArray(obj[key])) 
 
if (Array.isArray(obj[key])) delete obj[key] 
 
//return obj[key] -> {b: 2, c: ["hi", "there"]} 
 
} 
 
return obj[key] 
 
}

그래서, 첫 번째 키가 제거됩니다 ("true"), 두 번째 것은 not ("false"), 세 번째 것은 제거됩니다 ("true").