Как избежать указателя JSON в JavaScript с не использовать json.stringify? - PullRequest
0 голосов
/ 04 мая 2018

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

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

Большое спасибо.

Ответы [ 4 ]

0 голосов
/ 04 мая 2018

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

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

Также, если вы хотите узнать больше, обратитесь:

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

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

0 голосов
/ 04 мая 2018

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

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 голосов
/ 04 мая 2018

При назначении значения вы можете использовать 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 голосов
/ 04 мая 2018

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