簡體   English   中英

JavaScript 通過過濾 object 值從現有創建新數組

[英]JavaScript create new Array from existing by filtering object value

我正在嘗試通過過濾數組 object 從現有數組創建新數組,僅當value.added === true AND value.SP.type === 2女巫JavaScript ZC1C425268E68385D1AB5074C17A94F1從現有數組中創建新數組? 我在陣列中有大量 object 試圖快速可能的女巫 function 我使用?

這是現有的數組

[
  {
    "cat_id": 38,
    "rm_id": 1,
    "items": {
      "Box": [
        [
          {
            "parent_name": "Box",
            "child_name": "Small",
            "category_name": "Box",
            "SP": {
              "id": 203,
              "type": 2,
              "price": 15
            },
            "added": true
          },
          {
            "parent_name": "Box",
            "child_name": "Big",
            "category_name": "Box",
            "SP": {
              "id": 203,
              "type": 2,
              "price": 15
            },
            "added": true
          },
          {
            "parent_name": "Box",
            "child_name": "Very Big",
            "category_name": "Box",
            "SP": {
              "id": 203,
              "type": 1,
              "price": 15
            },
            "added": true
          }
        ]
      ]
    }
  },
  {
    "cat_id": 37,
    "rm_id": 1,
    "items": {
      "Box": [
        [
          {
            "parent_name": "Box",
            "child_name": "Small",
            "category_name": "Box",
            "SP": {
              "id": 203,
              "type": 1,
              "price": 15
            },
            "added": true
          },
          {
            "parent_name": "Box",
            "child_name": "Big",
            "category_name": "Box",
            "SP": {
              "id": 203,
              "type": 2,
              "price": 15
            },
            "added": true
          },
          {
            "parent_name": "Box",
            "child_name": "Very Big",
            "category_name": "Box",
            "SP": {
              "id": 203,
              "type": 1,
              "price": 15
            },
            "added": true
          }
        ]
      ],
      "Sets": [
        [
          [
            {
              "parent_name": "Drawers",
              "child_name": "Full",
              "SP": {
                "id": 172,
                "type": 1,
                "price": 20
              }
            },
            {
              "parent_name": "Drawers",
              "child_name": "Queen",
              "SP": {
                "id": 174,
                "type": 2,
                "price": 20
              },
              "added": true
            }
          ],
          [
            {
              "parent_name": "Drawers",
              "child_name": "Full",
              "SP": {
                "id": 172,
                "type": 1,
                "price": 20
              }
            },
            {
              "parent_name": "Drawers",
              "child_name": "Queen",
              "SP": {
                "id": 174,
                "type": 2,
                "price": 20
              },
              "added": true
            }
          ]
        ]
      ]
    }
  }
]

我正在嘗試從現有數組創建新數組,例如 output

[
  {
    "cat_id": 38,
    "rm_id": 1,
    "parent_name": "Box",
    "child_name": "Big",
    "category_name": "Box",
    "SP": {
      "id": 203,
      "type": 2,
      "price": 15
    },
    "added": true
  },
  {
    "cat_id": 37,
    "rm_id": 1,
    "parent_name": "Box",
    "child_name": "Big",
    "category_name": "Box",
    "SP": {
      "id": 203,
      "type": 2,
      "price": 15
    },
    "added": true
  },
  {
    "cat_id": 37,
    "rm_id": 1,
    "parent_name": "Box",
    "child_name": "Big",
    "category_name": "Box",
    "SP": {
      "id": 203,
      "type": 2,
      "price": 15
    },
    "added": true
  },
  {
    "cat_id": 37,
    "rm_id": 1,
    "parent_name": "Drawers",
    "child_name": "Queen",
    "SP": {
      "id": 174,
      "type": 2,
      "price": 20
    },
    "added": true
  }
]

 const data = [ { "cat_id": 38, "rm_id": 1, "items": { "Box": [ [ { "parent_name": "Box", "child_name": "Small", "category_name": "Box", "SP": { "id": 203, "type": 2, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Big", "category_name": "Box", "SP": { "id": 203, "type": 2, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Very Big", "category_name": "Box", "SP": { "id": 203, "type": 1, "price": 15 }, "added": true } ] ] } }, { "cat_id": 37, "rm_id": 1, "items": { "Box": [ [ { "parent_name": "Box", "child_name": "Small", "category_name": "Box", "SP": { "id": 203, "type": 1, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Big", "category_name": "Box", "SP": { "id": 203, "type": 2, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Very Big", "category_name": "Box", "SP": { "id": 203, "type": 1, "price": 15 }, "added": true } ] ], "Sets": [ [ [ { "parent_name": "Drawers", "child_name": "Full", "SP": { "id": 172, "type": 1, "price": 20 } }, { "parent_name": "Drawers", "child_name": "Queen", "SP": { "id": 174, "type": 2, "price": 20 }, "added": true } ], [ { "parent_name": "Drawers", "child_name": "Full", "SP": { "id": 172, "type": 1, "price": 20 } }, { "parent_name": "Drawers", "child_name": "Queen", "SP": { "id": 174, "type": 2, "price": 20 }, "added": true } ] ] ] } } ]; const arry = []; const nested = data.reduce((obj,value) => { Object.values(value.items).forEach((inner,k) => { if(Array.isArray(inner)){ inner.forEach((inner,key) => { if(Array.isArray(inner)){ inner.forEach((inner,key) => { if(Array.isArray(inner)){ inner.forEach(inner => { if(inner.added && inner.SP.type === 2){ arry.push({"cat_id":value.cat_id,"room_id":value.rm_id,...inner}) }; }) } if(inner.added && inner.SP.type === 2){ arry.push({"cat_id":value.cat_id,"room_id":value.rm_id,...inner}) }; }) } }) } }); return arry; },[]); console.log(nested);

如果有人想完成它,這是一個部分完整的答案。 它沒有連接外部屬性,並且有一些嵌套的圓形對象

輸入

 let arr = [ { "cat_id": 38, "rm_id": 1, "items": { "Box": [ [ { "parent_name": "Box", "child_name": "Small", "category_name": "Box", "SP": { "id": 203, "type": 2, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Big", "category_name": "Box", "SP": { "id": 203, "type": 2, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Very Big", "category_name": "Box", "SP": { "id": 203, "type": 1, "price": 15 }, "added": true } ] ] } }, { "cat_id": 37, "rm_id": 1, "items": { "Box": [ [ { "parent_name": "Box", "child_name": "Small", "category_name": "Box", "SP": { "id": 203, "type": 1, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Big", "category_name": "Box", "SP": { "id": 203, "type": 2, "price": 15 }, "added": true }, { "parent_name": "Box", "child_name": "Very Big", "category_name": "Box", "SP": { "id": 203, "type": 1, "price": 15 }, "added": true } ] ], "Sets": [ [ [ { "parent_name": "Drawers", "child_name": "Full", "SP": { "id": 172, "type": 1, "price": 20 } }, { "parent_name": "Drawers", "child_name": "Queen", "SP": { "id": 174, "type": 2, "price": 20 }, "added": true } ], [ { "parent_name": "Drawers", "child_name": "Full", "SP": { "id": 172, "type": 1, "price": 20 } }, { "parent_name": "Drawers", "child_name": "Queen", "SP": { "id": 174, "type": 2, "price": 20 }, "added": true } ] ] ] } } ]

const isObject = function(obj){
  return obj === Object(obj);
}


const myFunc = function(result, value){

  if (Array.isArray(value)){
      value.reduce(myFunc, result)
    // value.filter(function(child) {
    //  return ! Array.isArray(child)
    // }) 
  }
  if (isObject(value)) {
        Object.values(value).reduce(myFunc, result)
        Object.keys(value).forEach(child => {
        if (child != "SP" && isObject(value[child])){
            delete value[child]
      }
    })
  }
  //for(let i = 0; i<result.length; i++){
  //  result[i] = {...result[i], ...value}
  //}
  if (value.SP && value.added === true && value.SP.type === 2){
    result.push(value)
  }
  return result
}

newArr = arr.reduce(myFunc, [])

Output

 [{ added: true, category_name: "Box", child_name: "Small", parent_name: "Box", SP: { id: 203, price: 15, type: 2 } }, { added: true, category_name: "Box", child_name: "Big", parent_name: "Box", SP: { id: 203, price: 15, type: 2 } }, [circular object Object], [circular object Object], { added: true, category_name: "Box", child_name: "Big", parent_name: "Box", SP: { id: 203, price: 15, type: 2 } }, [circular object Object], { added: true, child_name: "Queen", parent_name: "Drawers", SP: { id: 174, price: 20, type: 2 } }, [circular object Object], { added: true, child_name: "Queen", parent_name: "Drawers", SP: { id: 174, price: 20, type: 2 } }, [circular object Object]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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