下划线将数组的键映射到另一个

时间:2013-04-16 16:34:51

标签: javascript facebook-javascript-sdk underscore.js

我想使用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的长度为零?

我觉得我正在使用删除语句,但我不确定。

修改

我可能会过多地抽象这个代码,因为简单的运行似乎工作正常。

原始数据数组是来自FB.api('/me/friends', function(response) {...}

的回复

更具体地说,它是一个对象数组,如     {id:“12345”,姓名:“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]}
}

1 个答案:

答案 0 :(得分:3)

您正确使用delete,但您可能需要确保:

  1. data确实是Array类型,data数组
  2. 中有元素
  3. data数组中的每个元素都具有名为a
  4. 的属性

    您的代码适用于我: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