как изменить объект массива имен ключей в javascript?

#javascript

#javascript

Вопрос:

У меня есть массив объектов задачи, подобных этому:

 1-1 [
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '4',
    is_submit: 0,
    is_intime: 0,
    total: 1
  },
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '8',
    is_submit: 1,
    is_intime: 0,
    total: 1
  },
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '3,5,7',
    is_submit: 1,
    is_intime: 1,
    total: 3
  }
]
2-2 [...]
3-4 [...]
  

Как изменить каждое общее имя ключа на другое имя ключа, используя Javascript / ES6:

ожидаемый результат только изменить общее имя ключа:

у меня всегда есть 3 объекта в каждом массиве, и я хочу изменить общий ключ каждого объекта на noSubmit, late и OnTime на основе индекса

 1-1 [
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '4',
    is_submit: 0,
    is_intime: 0,
    noSubmit: 1
  },
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '8',
    is_submit: 1,
    is_intime: 0,
    late: 1
  },
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '3,5,7',
    is_submit: 1,
    is_intime: 1,
    onTime: 3
  }
]
2-2 [...]
3-4 [...]
  

Как мне решить проблему?

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

1. Я не вижу никакого кода. можете ли вы привести примеры того, что вы пробовали?

Ответ №1:

Вы не можете изменить имя свойства объекта JavaScript, вы можете только создать новое свойство и удалить старое. Вы можете сделать это на существующем объекте или создав новый объект.

Я не совсем понимаю правила изменения, о котором вы говорите, но вот простой пример:

 entry.newName = entry.originalName;
delete entry.originalName;
  

Живой пример:

 const container = {
    "1-1": [
        {
            originalName: 1,
            unrelatedProperty: "example1",
        },
        {
            originalName: 2,
            unrelatedProperty: "example2",
        },
        {
            originalName: 3,
            unrelatedProperty: "example3",
        },
    ],
    "2-2": [
        {
            originalName: 4,
            unrelatedProperty: "example4",
        },
        {
            originalName: 5,
            unrelatedProperty: "example5",
        },
        {
            originalName: 6,
            unrelatedProperty: "example6",
        },
    ]
};

for (const array of Object.values(container)) {
    for (const entry of array) {
        entry.newName = entry.originalName;
        delete entry.originalName;
    }
}

console.log(container);  

Или путем создания новых объектов:

 const {originalName, ...rest} = entry;
const newEntry = {newName: originalName, ...rest};
  

Живой пример:

 const container = {
    "1-1": [
        {
            originalName: 1,
            unrelatedProperty: "example1",
        },
        {
            originalName: 2,
            unrelatedProperty: "example2",
        },
        {
            originalName: 3,
            unrelatedProperty: "example3",
        },
    ],
    "2-2": [
        {
            originalName: 4,
            unrelatedProperty: "example4",
        },
        {
            originalName: 5,
            unrelatedProperty: "example5",
        },
        {
            originalName: 6,
            unrelatedProperty: "example6",
        },
    ]
};


for (const [key, array] of Object.entries(container)) {
    container[key] = array.map(({originalName, ...rest}) => ({newName: originalName, ...rest}));
}

console.log(container);  

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

1. Спасибо за ваш ответ. итак, мы можем изменить каждое свойство объекта с другим именем, как я ожидал в этом посте?

2. @MuhammadBahrijar — Я не понимаю, о чем вы там спрашиваете. Я думаю, что я был достаточно ясен выше: вы не можете изменить имя свойства. Вы можете создать новое свойство (с новым именем) и удалить другое свойство.

3. @Bahri у вас всегда есть 3 объекта в каждом массиве, и вы хотите изменить total ключ каждого объекта на noSubmit , late и onTime на основе их индекса?