我無法在打字稿中組合物件陣列中的物件。
陣列看起來像這樣:
0: {type: 'FeatureCollection', features: Array(134)}
1: {type: 'FeatureCollection', features: Array(109)}
我需要的是一個結合了所有“特征”的物件(沒有陣列)——所以它看起來像這樣:
{type: 'FeatureCollection', features: Array(243)}
我對打字稿很陌生,很抱歉這個可能很簡單的問題......
太感謝了!!
編輯:也許這個問題不太好理解。希望這會有所幫助:Array(134) 表示里面有 134 個物件。當物件陣列(集合)為 2 長時,這可以手動完成我需要的操作:
const result = [...collection[0].features, ...collection[1].features];
const resultCollection: FeatureCollection = collection[0];
resultCollection.features = result;
我需要使這項作業適用于任何長度的收藏。
uj5u.com熱心網友回復:
你在尋找這樣的東西嗎?您需要添加型別,但您可以使用 vanilla JS 方法合并來自features陣列中所有條目的陣列。data
- 創建
output物件并指定其type. - 用于
Array#filter選擇data匹配型別的條目。 - 用于從上面的每個條目
Array#flatMap中選擇features陣列并將其內容投影到單個陣列中。
const data = [
{ type: 'FeatureCollection', features: [1, 2, 3] },
{ type: 'FeatureCollection', features: [4, 5, 6] }
];
const output = {
type: 'FeatureCollection',
features: data
.filter(obj => obj.type === 'FeatureCollection')
.flatMap(obj => obj.features)
};
console.dir(output);
uj5u.com熱心網友回復:
只需使用一個簡單的Array.prototype.reduce函式和擴展運算子
const original = [
{ type: "banana", features: ["34", "wow", "hotdog"] },
{ type: "banana", features: ["dog", "cat", "recursion"] },
];
const compress = (original) => original.reduce((acc, cur) => {
acc.features = [...(acc.features ?? []), ...cur.features];
return acc;
}, { type: (original[0].type) });
console.log(compress(original));
uj5u.com熱心網友回復:
使用reduce函式:
const array = [
{type: 'FeatureCollection', features: [1, 2, 3]},
{type: 'FeatureCollection', features: [4, 5, 6]},
{type: 'Test', features: [4, 5, 6]}
]
const merged = array.reduce((array, item) => {
const found = array.find((i) => i.type === item.type);
if (found) {
found.features.push(...item.features);
} else {
array.push(item);
}
return array;
}, []);
console.log(merged);
----已編輯----
選項 2:
const array = [
{type: 'FeatureCollection', features: [1, 2, 3]},
{type: 'FeatureCollection', features: [4, 5, 6]},
{type: 'Test', features: [4, 5, 6]}
]
const merged = array.reduce((obj, item) => {
if (obj[item.type]) {
obj[item.type].push(...item.features);
} else {
obj[item.type] = item.features;
}
return obj;
}, {} as {[key: string]: number[]});
const keys = Object.keys(merged);
const result = keys.map((k) => ({type: k, features: merged[k]}));
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/446735.html
標籤:javascript 数组 打字稿 javascript 对象
