简体   繁体   English

JavaScript 通过过滤 object 值从现有创建新数组

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

I am trying to create new array from existing array by filtering array object only if value.added === true AND value.SP.type === 2 witch JavaScript function useful for fast create new array from existing array with cat_id and rm_id ?我正在尝试通过过滤数组 object 从现有数组创建新数组,仅当value.added === true AND value.SP.type === 2女巫JavaScript ZC1C425268E68385D1AB5074C17A94F1从现有数组中创建新数组? i have large number object in array trying to fast possible witch function i use?我在阵列中有大量 object 试图快速可能的女巫 function 我使用?

This is existing array这是现有的数组

[
  {
    "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
            }
          ]
        ]
      ]
    }
  }
]

I am trying to create new array from existing array like this output我正在尝试从现有数组创建新数组,例如 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);

Here's a partially complete answer if anyone wants to finish it.如果有人想完成它,这是一个部分完整的答案。 It doesn't concat the outer properties and there's some nested circular objects它没有连接外部属性,并且有一些嵌套的圆形对象

Input输入

 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 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