獲取的唯一密鑰如果我有對象的一個這樣的數組:從多個對象
var mountains = [
{ name: 'Kebnekaise', elevation: 2106 },
{ name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];
如何讓所有的唯一鍵即['name', 'elevation', 'comment']
?
獲取的唯一密鑰如果我有對象的一個這樣的數組:從多個對象
var mountains = [
{ name: 'Kebnekaise', elevation: 2106 },
{ name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];
如何讓所有的唯一鍵即['name', 'elevation', 'comment']
?
在ECMAScript中2015年,它真的很簡單:
let mountains = [
{ name: 'Kebnekaise', elevation: 2106 },
{ name: 'Mount Ngauruhoe', elevation: 2291, comment: 'aka Mount Doom' }
];
let uniqueKeys = Object.keys(Object.assign({}, ...mountains));
你可以遍歷對象的數組過來,遍歷每個元素與Object.keys(obj)
鍵,將其添加到哈希以避免重複:
function getKeySet (data) {
var keys = {};
data.forEach(function (datum) {
Object.keys(datum).forEach(function (key) {
keys[key] = true;
});
});
return Object.keys(keys);
}
或者,您可以將所有密鑰添加到數組並過濾掉重複項。無論哪種方式,這將是O(nm)其中n是陣列中元素的數量,m是鍵的平均數量。
使用ES6,一個可以做
var unique = new Set([].concat.apply([],mountains.map(Object.keys)))
沒有ES6,像
var unique = [].concat.apply([],mountains.map(Object.keys)).filter(function(value,i,arr) {
return arr.indexOf(value) === i;
});
你嘗試過什麼?你確定它的表現是一個問題嗎?你多久一次這樣做,它必須是**最**性能的方式? – Barmar
「*性能最高*」過於寬泛,取決於具體情況。解決你的問題。 – Amit
我只需循環遍歷數組,然後遍歷對象的鍵,然後將它們作爲鍵添加到結果對象。然後使用'Object.keys(result)'獲得唯一鍵列表。 – Barmar