Удалить и изменить значения из объекта - PullRequest
0 голосов
/ 11 января 2019

У меня есть объект, который содержит следующие данные:

   {cost: 2
    field1: 2
    field2: 2
    field3: 2
    field4: 2
    length: 2
    material: 5715382975332352
    name: "name"
    stock: 2
    thickness: 2
    type: "RECTANGULAR"}

Теперь я хочу изменить field1, field2, field3 и field4 на что-то вроде:

parameters: [2, 2, 2, 2], поэтому удалите поле и превратите их в массив, содержащий только значения, чтобы обновленный объект выглядел следующим образом:

   {cost: 2
    parameters: [2,2,2,2] //values field1, field2, field3, field4
    length: 2
    material: 5715382975332352
    name: "name"
    stock: 2
    thickness: 2
    type: "RECTANGULAR"}

Примечание: я также могу изменить имена field1, field2 и т. Д., Если это будет проще для сортировки массива.

Я попробовал следующее, но безуспешно: Преобразование свойств и значений объекта в массив пар ключ-значение

Ответы [ 4 ]

0 голосов
/ 11 января 2019

Вы можете сделать это ..

<script type="text/javascript">

    var obj = {
        cost: 2,
    field1: 2,
    field2: 2,
    field3: 2,
    field4: 2,
    length: 2,
    material: 5715382975332352,
    name: "name",
    stock: 2,
    thickness: 2,
    type: "RECTANGULAR"};

    var obj2 = {};
    var arr = [];

    for (var k in obj) {
        if(k.includes("field")){ // if key contains field text
            arr.push(obj[k]);
        } else {
            obj2[k] = obj[k];   
        }
    }
    obj2['parameters'] = arr;

    // your object
    console.log(obj);
    // your desired object
    console.log(obj2);


</script>
0 голосов
/ 11 января 2019

Получите записи из вашего входного объекта и затем уменьшите их до нового объекта, проверив реквизиты с помощью ключа field и сгруппировав их в новый реквизит parameters, который представляет собой массив:

const data = {
  cost: 1,
  field1: 2,
  field2: 3,
  field3: 4,
  field4: 5,
  length: 6,
  material: 5715382975332352,
  name: "name",
  stock: 7,
  thickness: 8,
  type: "RECTANGULAR"
};

console.log(Object.entries(data).reduce((acc, val, ind) => {
  if (val[0].includes('field')) {
    acc['parameters'] = acc['parameters'] || [];
    acc['parameters'].push(val[1]);
  }
  else {
    acc[val[0]] = val[1];
  }
  return acc;
}, {}));
0 голосов
/ 11 января 2019

Это будет делать -

    var a={cost: 2,
        field1: 2,
        field2: 2,
        field3: 2,
        field4: 2,
        length: 2,
        material: 5715382975332352,
        name: "name",
        stock: 2,
        thickness: 2,
        type: "RECTANGULAR"};
       var arr=Object.keys(a);
       var values=[];
       arr.forEach((e)=>{
    if(e.includes('field'))
    {
        
    values.push(a[e]);
    delete a[e];
    }
       })
       a.parameters=values;
       console.log(a);
0 голосов
/ 11 января 2019

Шаги:

  1. Создать массив в data объект со свойством с именем parameters.

  2. Вставить каждый data.field* в массив data.parameters.

  3. Удалить каждые data.field* впоследствии.

без петли

let data = {cost: 2,
    field1: 2,
    field2: 2,
    field3: 2,
    field4: 2,
    length: 2,
    material: 5715382975332352,
    name: "name",
    stock: 2,
    thickness: 2,
    type: "RECTANGULAR"
}

data.parameters = [data.field1, data.field2, data.field3, data.field4];
delete data.field1;
delete data.field2;
delete data.field3;
delete data.field4;
console.log(data);

с петлей

let data = {cost: 2,
    field1: 2,
    field2: 2,
    field3: 2,
    field4: 2,
    length: 2,
    material: 5715382975332352,
    name: "name",
    stock: 2,
    thickness: 2,
    type: "RECTANGULAR"
}

data.parameters = [];
for (let i = 1; i <= 4; i++){
  data.parameters.push(data["field"+i]);
  delete data["field"+i];
}
console.log(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...