簡體   English   中英

將數組對象轉換為新的數組對象(使用 angular)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM