[英]Convert Array Object to new Array Object (using angular)
我有數組對象
[
{ testTargetname: "Test system", in: 2, low: 1, medium: 2 },
{ testTargetname: "Test app", in: 2, low: 1, medium: 0 }]
我不知道如何轉換為下面的新數組對象。 請幫我
[
{ in: 1, testTargetname: "Test system" },
{ in: 1, testTargetname: "Test system" },
{ low: 1, testTargetname: "Test system" },
{ medium: 1, testTargetname: "Test system" },
{ medium: 1, testTargetname: "Test system" },
{ medium: 1, testTargetname: "Test system" },
{ in: 1, testTargetname: "Test app" },
{ in: 1, testTargetname: "Test app" },
{ low: 1, testTargetname: "Test app" },
]
當 medium = 0 時,不顯示在新數組中
您可以使用reduce
並在回調內部迭代當前對象並檢查當前鍵的值是否為數字且大於 0
let data = [{ testTargetname: "Test system", in: 2, low: 1, medium: 2 }, { testTargetname: "Test app", in: 2, low: 1, medium: 0 } ]; var val = data.reduce(function(d, a) { for (const b in a) { if (!isNaN(a[b]) && 0 < a[b]) { for (var e = 0; e < a[b]; e++) { d.push({testTargetname : a.testTargetname, [b] : 1}); } } } return d; }, []); console.log(val)
我看到沒有人嘗試過 flatMap,所以請看看我的解決方案
const list = [ { testTargetname: 'Test system', in: 2, low: 1, medium: 2 }, { testTargetname: 'Test app', in: 2, low: 1, medium: 0 } ] const newList = list.flatMap((currentItem) => { const targetKey = 'testTargetname' return Object.entries(currentItem) .filter(([key]) => key !== targetKey) .map((item) => { const obj = Object.fromEntries([item]) return { ...obj, [targetKey]: currentItem[targetKey] } }) }) console.log(newList)
PS,這是如何將其映射到正確結構的示例,但是如果您想過濾某些特定值,那么最后只需使用filter
功能
const array = [
{ testTargetname: "Test system", in: 2, low: 1, medium: 2 },
{ testTargetname: "Test app", in: 2, low: 1, medium: 0 }]
let createObject = (_object, _key) => {
const newKeyArray = []
for(let i = 0; i < _object[_key] || 0; i++){
let newObject = {}
newObject[_key] = 1//_object[_key]
newObject["testTargetname"] = _object["testTargetname"]
newKeyArray.push(newObject)
}
return newKeyArray;
}
newArray = [];
array.forEach( (_object) => {
["in", "low", "medium"].forEach((_key) => {
newArray.push( ...createObject(_object, _key) )
})
})
console.log(newArray)
這更像是一個 JavaScript/TypeScript 問題,因為它與 Angular 沒有任何關系。
const source = [
{ testTargetname: "Test system", in: 2, low: 1, medium: 2 },
{ testTargetname: "Test app", in: 2, low: 1, medium: 0 },
];
source.reduce((result, item) => {
const keys = Object.keys(item).filter((key) => key !== "testTargetname");
const itemsToAdd = keys.reduce((response, key) => {
let addToResponse: Record<string, string | number>[];
for (let i = 1; i <= item[key]; i++) {
[...addToResponse, { [key]: 1, testTargetname: item.testTargetname }];
}
return !!addToResponse ? [...response, ...addToResponse] : response;
}, [] as Record<string, string | number>[]);
return [...result, ...itemsToAdd];
}, [] as Record<string, string | number>[]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.