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 回答