2015-05-14 49 views
0

我正在嘗試將對象鍵名改爲不同的東西。像「名稱=>文本,_id =>值」更改對象鍵名的有效方法

我試過以下工作正常。我想知道是否有更好的方法來做到這一點?

var a = { 
    name: "Foo", 
    _id: "1234" 
}; 

var b = { 
    name: "bar", 
    _id: "222" 
}; 

var map = { 
    name: "text", 
    _id: "value", 
}; 

var arr = [a, b]; 
var arr2 = []; 

_.each(arr, function (obj) { 
    obj = _.reduce(a, function (result, value, key) { 
     key = map[key] || key; 
     result[key] = value; 
     return result; 
    }, {}); 

    arr2.push(obj); 
}); 

console.log(arr2); 

JSFiddle

+0

由於原始鍵和備用鍵之間存在一對一的對應關係,因此語義上的* map *操作可能更合適。 – doldt

回答

2

如果屬性的數量只有兩個,您可以手動映射。

var arr2 = _.map(arr, function (e) { 
    var o = {}; 
    o[map.name] = e.name; 
    o[map._id] = e._id; 
    return o; 
}); 

有時,手動操作會更清潔。

如果你想遍歷給定對象的屬性,則:

var arr2 = _.map(arr, function (e) { 
    var o = {}; 
    for (k in e) { 
    o[k] = e[k]; 
    } 
    return o; 
}); 

這些代碼是短,比原有的更具有可讀性。

+0

正是我所期待的。謝謝。 – Chris

相關問題