我想使用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]}
}
答案 0 :(得分:3)
您正确使用delete
,但您可能需要确保:
data
确实是Array
类型,data
数组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