首先,我試圖將一個包含多個物件的陣列合并到一個陣列中,每個陣列中的每個鍵都包含在每個物件中。
最后,應洗掉陣列中的任何重復項以及名為“name”的任何元素。
輸入:
const data = [
{
name: '10/20',
Tyler: 1,
Sonia: 0,
Pedro: 0,
},
{
name: '10/23',
Tyler: 0.5,
Sonia: 0.25,
Pedro: 0.75,
George: 0.5,
},
];
輸出:
["Tyler", "Sonia", "Pedro", "George"]
這是我迄今為止嘗試過的:
const mergedData = data.reduce((prev, cur) => {
const obj = cur[0];
const keys = Object.keys(obj);
const names = keys.splice(1);
return { names };
}, []);
我正在嘗試捕獲除“name”以外的任何鍵名并將其添加到最終陣列中。但是,這是我卡住的地方,因為我收到此錯誤,TypeError: Cannot convert undefined or null to object
注意:物件可能有不同的長度,包含混合名稱,但絕不能有任何重復。
uj5u.com熱心網友回復:
一個選項是找到放在一個集合中的所有密鑰并洗掉name密鑰
const data = [
{
name: '10/20',
Tyler: 1,
Sonia: 0,
Pedro: 0,
},
{
name: '10/23',
Tyler: 0.5,
Sonia: 0.25,
Pedro: 0.75,
George: 0.5,
},
];
const set = new Set(data.reduce((acc, i) => [...acc, ...Object.keys(i)], []));
set.delete('name');
const result = [...set];
console.log(result);
uj5u.com熱心網友回復:
const data = [
{
name: '10/20',
Tyler: 1,
Sonia: 0,
Pedro: 0,
},
{
name: '10/23',
Tyler: 0.5,
Sonia: 0.25,
Pedro: 0.75,
George: 0.5,
},
];
const result =Array.from(new Set(data.reduce((acc, i) => [...acc, ...Object.keys(i)], [])));
console.log(result)
uj5u.com熱心網友回復:
如果您有權訪問 ES6 方法,則可以使用Set(在創建時確保唯一值)來執行此操作,如果需要,可以通過Destructuring將其轉換回陣列。
data = [{name: '0', Tyler: '1', Dan: '2', Carl: '3'}, {name: '0', Tyler: '1', Dan: '2', Eric: '3', Danny: '4'}];
const output = (data) => {
let output = [];
// This makes sure you get each array and then strips just the keys as desired
data.forEach(item => {
output = output.
concat(Object.keys(item))
});
// This creates the set, strips our dups, and then spreads itself into an array
return [...new Set(output)]
// Strip out the 'name' key as needed
// NOTE: This should be a param instead of hard-coded, but this is easier to show
.filter(res => res != 'name');
}
console.log(output(data));
考慮到它只導航整個陣列一次,并且每個物件本身不應該有數百萬個屬性來導致.keys()任何問題,這應該是相當高效的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334082.html
標籤:javascript 数组 算法
