Написать функцию, которая создает динамический вывод на основе входного массива в JS

#javascript

#javascript

Вопрос:

Я пытаюсь написать функцию на JavaScript, которая будет принимать массив идентификаторов в качестве входных данных и генерировать соответствующий вывод, упомянутый ниже.

Ниже приведены ожидаемые случаи:

когда входной массив:

 ids= [1, 2]
 

ожидаемый результат:

 {
              c: 0,
              query: {
                or: [
                    {  
                      and: [{
                            equals: {
                            field: "emp_id",
                            value: 36,
                        }},
                        {
                            equals: {
                            field: "class_id",
                            value: 1,
                        },
                      }
                        ]

                    },
                    {  
                      and: [{
                            equals: {
                            field: "emp_id",
                            value: 29,
                        }},
                        {
                            equals: {
                            field: "class_id",
                            value: 1,
                        },
                      }
                        ]

                    },
                                        {  
                      and: [{
                            equals: {
                            field: "emp_id",
                            value: 29,
                        }},
                        {
                            equals: {
                            field: "class_id",
                            value: 2,
                        },
                      }
                        ]

                    },
                                        {  
                      and: [{
                            equals: {
                            field: "emp_id",
                            value: 36,
                        }},
                        {
                            equals: {
                            field: "class_id",
                            value: 2,
                        },
                      }
                        ]

                    }
                ]
            },
            a: {}
              };
 

когда входной массив:

 ids = [1,2,3]
 

ожидаемый результат :

  {
      c: 0,
      query: {
        or: [
            {  
              and: [{
                    equals: {
                    field: "emp_id",
                    value: 36,
                }},
                {
                    equals: {
                    field: "class_id",
                    value: 1,
                },
              }
                ]

            },
            {  
              and: [{
                    equals: {
                    field: "emp_id",
                    value: 29,
                }},
                {
                    equals: {
                    field: "class_id",
                    value: 1,
                },
              }
                ]

            },
                                {  
              and: [{
                    equals: {
                    field: "emp_id",
                    value: 29,
                }},
                {
                    equals: {
                    field: "class_id",
                    value: 2,
                },
              }
                ]

            },
                                {  
              and: [{
                    equals: {
                    field: "emp_id",
                    value: 36,
                }},
                {
                    equals: {
                    field: "class_id",
                    value: 2,
                },
              }
                ]

            },
                                                    {  
              and: [{
                    equals: {
                    field: "emp_id",
                    value: 36,
                }},
                {
                    equals: {
                    field: "class_id",
                    value: 3,
                },
              }
                ]

            },
                                                    {  
              and: [{
                    equals: {
                    field: "emp_id",
                    value: 29,
                }},
                {
                    equals: {
                    field: "class_id",
                    value: 3,
                },
              }
                ]

            }
        ]
    },
    a: {}
      }; 
 

emp_id: 29 и 36 — это своего рода постоянные значения
, которые всегда будут там

Вот что я пытаюсь сделать:

    function fc(ids){
for (let i =0 ;i< ids.length;i  ){
    let q = {
              c: 0,
              query: {
                or: [
                    {  
                      and: [{
                            equals: {
                            field: "emp_id",
                            value: 36,
                        }},
                        {
                            equals: {
                            field: "class_id",
                            value: ids[i],
                        },
                      }
                        ]

                    },
                    {  
                      and: [{
                            equals: {
                            field: "emp_id",
                            value: 29,
                        }},
                        {
                            equals: {
                            field: "class_id",
                            value: ids[i],
                        },
                      }
                        ]

                    }
                ]
            },
            a: {}
              };
              return q;
}
   }

console.log(fc([1,2,3])); // logs the output with only id:1 not 2!
 

Комментарии:

1. правильный отступ покажет вам, почему он работает не так, как ожидалось. Вы создаете q и возвращаете его внутри цикла.

Ответ №1:

это может быть полезно

 const fc = (classIds) => {
  const empIds = [29, 36];
  const arr = [];

  const query = (classId, empId) => {
    return {
      and: [
        {
          equals: {
            field: "emp_id",
            value: empId,
          },
        },
        {
          equals: {
            field: "class_id",
            value: classId,
          },
        },
      ],
    };
  };

  classIds.forEach((cId) => {
    empIds.forEach((eId) => {
      arr.push(query(cId, eId));
    });
  });

  return {
    c: 0,
    query: {
      or: arr,
    },
    a: {},
  };
};

console.log(fc([1, 2, 3]));