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 の長さがゼロになるのはなぜですか?

delete ステートメントを間違って使用しているように感じますが、よくわかりません。

編集:

単純な実行は問題なく機能しているように見えるため、このコードを抽象化しすぎている可能性があります。

元のデータ配列は、FB.api('/me/friends', function(response) {...}

具体的には、{id: "12345", name: "Bubba Watson"} などのオブジェクトの配列です。

これは 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]}
}
4

1 に答える 1

3

正しく使用していdeleteますが、次のことを確認する必要がある場合があります。

  1. dataは確かに型であり、配列Arrayに要素がありますdata
  2. 配列内の各要素には、dataという名前のプロパティがあります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
于 2013-04-16T16:51:23.900 に答える