2013-04-16 2 views
1

Underscore.js의 map() 함수를 사용하여 원래 키를 제거하는 동안 큰 배열의 키를 다른 키로 매핑하려고합니다.배열 키를 다른 키로 매핑하는 밑줄

large_array = _.map(data, function(element) { 
    element.b = element.a; 
    delete element.a; 
    return element; 
}); 
console.log(large_array) // Returns an array with length == 0 

왜 large_array의 길이는 0입니까?

삭제 구문을 사용하고있는 것처럼 느껴졌지만 확실하지 않습니다.

편집 : 간단한 실행이 잘 작동하는 것 때문에

내가 너무 많은 코드를 추출 할 수있다. 이것과

원래의 데이터 배열을보다 상세 FB.api('/me/friends', function(response) {...}

의 응답이며, 그 오브젝트의 배열 등 { "12345"이름 "부바 왓슨"이드}이고 Facebook으로부터의 응답, 각 객체는 'id'속성을 갖습니다.

실제 코드는 'id'속성을 'facebook_id'속성으로 변경합니다.

FB.api('/me/friends', function(response) { 
    console.log(response.data); // Returns 600+ Array of Bubba Watson like objects, each with an id. 
    large_array = _.map(response.data, function(element) { 
    element.facebook_id = element.id; 
    delete element.id; 
    return element; 
    }); 
    console.log(large_array); // Mysteriously Returns: {length: 0, __proto__: Array[0]} 
} 
+0

'large_array'는 이전에 어떻게 보였습니까? – Niko

+0

console.log (data)는 각각 'a'속성을 가진 약 600 개의 객체가있는 배열을 반환합니다. – TimeEmit

+0

\\. map()은 길이 속성을 console.log (=. map (data, function (element) {return element; ... – TimeEmit

답변

3

당신은 그러나 당신이 있는지 확인해야 제대로 delete을 사용하고 있습니다 : Array을 입력 실제로

  1. data하고 data 배열의 data 배열
  2. 각 요소의 요소가있다 속성 이름 a

코드 나를위한 작품 : http://jsfiddle.net/EJTgx/

var data = [ 
    { a: 10 }, 
    { a: 20 }, 
    { a: 30 } 
]; 

var large_array = _.map(data, function(element) { 
    element.b = element.a; 
    delete element.a; 
    return element; 
}); 

console.log(large_array.length); // Returns 3 
+0

이것은 매우 안심입니다, 감사합니다. 방금 배열에있는 모든 요소에 주어진 속성이 있다고 확신한다고 설명하기 위해 질문을 업데이트했습니다. – TimeEmit