JavaScript создать новый массив из существующего путем фильтрации значения объекта - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь создать новый массив из существующего массива, фильтруя объект массива, только если value.added === true AND value.SP.type === 2 witch JavaScript функция, полезная для быстрого создания нового массива из существующего массива с cat_id и rm_id ? У меня есть объект с большим числом в массиве, который пытается ускорить возможную функцию ведьмы, которую я использую?

Это существующий массив

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

Я пытаюсь создать новый массив из существующего массива, как этот вывод

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

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Вот частично полный ответ, если кто-то хочет его sh закончить. Он не объединяет внешние свойства, и есть несколько вложенных круглых объектов

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, [])

Выход

[{
  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]]
0 голосов
/ 17 июня 2020

        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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...