Как избежать указателя JSON в JavaScript с не использовать json.stringify?

1

Я хочу скопировать сотрудника на нового сотрудника и не указывать на старого сотрудника.
Я пытаюсь использовать:

newEmployees.assign([{}].employees); <br>
newEmployees = [{...employees}]; <br>

Они указывают на старого сотрудника.

const employees = [
    {
        "id": "1001",
        "firstname": "Luke",
        "lastname": "Skywalker",
        "company": "Walt Disney",
        "salary": "40000"
    },
    {
        "id": "1002",
        "firstname": "Tony",
        "lastname": "Stark",
        "company": "Marvel",
        "salary": "1000000"
    },
    {
        "id": "1003",
        "firstname": "Somchai",
        "lastname": "Jaidee",
        "company": "Love2work",
        "salary": "20000"
    },
    {
        "id": "1004",
        "firstname": "Monkey D",
        "lastname": "Luffee",
        "company": "One Piece",
        "salary": "9000000"
    }
];

let newEmployees = [{}];
newEmployees[0] = employees[3]; // assign
employees[3]['firstname'] = 'Arhus'; // change old employees
console.log(newEmployees); //firstname: 'Arhus' - shows employees content

Огромное спасибо.

Теги:
pointers

4 ответа

1
Лучший ответ

Просто используйте спред при назначении значения, подобного этому

const employees = [
    {
        "id": "1001",
        "firstname": "Luke",
        "lastname": "Skywalker",
        "company": "Walt Disney",
        "salary": "40000"
    },
    {
        "id": "1002",
        "firstname": "Tony",
        "lastname": "Stark",
        "company": "Marvel",
        "salary": "1000000"
    },
    {
        "id": "1003",
        "firstname": "Somchai",
        "lastname": "Jaidee",
        "company": "Love2work",
        "salary": "20000"
    },
    {
        "id": "1004",
        "firstname": "Monkey D",
        "lastname": "Luffee",
        "company": "One Piece",
        "salary": "9000000"
    }
];

let newEmployees = [{}];
newEmployees[0] = { ...employees[3] };
employees[3]['firstname'] = 'Arhus'; // change employee
console.log(newEmployees); //firstname is still Monkey D
0

При назначении значения вы можете использовать Object.assign или Object.clone

Рассмотрим следующий фрагмент:

 const employees = [
        {
            "id": "1001",
            "firstname": "Luke",
            "lastname": "Skywalker",
            "company": "Walt Disney",
            "salary": "40000"
        },
        {
            "id": "1002",
            "firstname": "Tony",
            "lastname": "Stark",
            "company": "Marvel",
            "salary": "1000000"
        },
        {
            "id": "1003",
            "firstname": "Somchai",
            "lastname": "Jaidee",
            "company": "Love2work",
            "salary": "20000"
        },
        {
            "id": "1004",
            "firstname": "Monkey D",
            "lastname": "Luffee",
            "company": "One Piece",
            "salary": "9000000"
        }
    ];
    
    let newEmployees = [{}];
    newEmployees[0] = Object.assign({}, employees[3]);
    employees[3]['firstname'] = 'Arhus';
    console.log(newEmployees);
0

Я понимаю, что вы хотите скопировать значение объекта и не хотите использовать stringify. Скручивание объекта и его анализ в JSON - это один из способов, клонирование объекта - это еще один метод, и я считаю, что распространение также работает.

Но если вы предпочитаете удобство, вы можете захотеть взглянуть на библиотеку lodash library _.clone и _.clonedeep.

Также, если вы хотите прочитать больше, обратитесь:

Поведение Lodash.clone и.cloneDeep

Как скопировать объект по значению, а не по ссылке

0

Просто используйте .map и распространение объекта:

const employees = [
    {
        "id": "1001",
        "firstname": "Luke",
        "lastname": "Skywalker",
        "company": "Walt Disney",
        "salary": "40000"
    },
    {
        "id": "1002",
        "firstname": "Tony",
        "lastname": "Stark",
        "company": "Marvel",
        "salary": "1000000"
    },
    {
        "id": "1003",
        "firstname": "Somchai",
        "lastname": "Jaidee",
        "company": "Love2work",
        "salary": "20000"
    },
    {
        "id": "1004",
        "firstname": "Monkey D",
        "lastname": "Luffee",
        "company": "One Piece",
        "salary": "9000000"
    }
];
const newEmployees = employees.map(employee => ({...employee}));
employees[3].firstname = 'Arhus';
console.log(newEmployees[3]);
console.log(employees[3]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню