Удалить ключ value из вложенного массива объектов - PullRequest
1 голос
/ 07 мая 2020

У меня есть такой массив:

rows: [
  [
    { title: 'Test', value: 1 },
    { title: 'Test2', value: 2 },
    { title: 'Test3', value: 3 },
  ],
  [
    { title: 'Test4', value: 4 },
    { title: 'Test5', value: 5 },
  ],
  [
    { title: 'Test6', value: 6 },
    { title: 'Test7', value: 7 },
  ]
]

Теперь я бы хотел отключить ключ value в каждом вложенном объекте.

На данный момент я делаю:

rows.map(function(fields){
    return fields.map(function(field){
      field.value = '';
      return field;
    })
});

Видите ли вы лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 07 мая 2020

function deleteKeyFromObject(inputObject) {
    for (let[currentObjectKey,currentObjectValue] of Object.entries(inputObject)) {
        if (currentObjectKey === 'value') {
            delete inputObject.value;
        } else if (Array.isArray(currentObjectValue)) {
            deleteObjectFromArray(currentObjectValue);
        } else if (typeof currentObjectValue === 'object') {
            deleteKeyFromObject(currentObjectValue);
        }
    }
    ;
}

function deleteObjectFromArray(inputArray) {
    for (let currentIndex = 0; currentIndex < inputArray.length; currentIndex++) {
        let currentElement = inputArray[currentIndex];
        if (Array.isArray(currentElement)) {
            deleteObjectFromArray(currentElement);
        } else if (typeof currentElement === 'object') {
            deleteKeyFromObject(currentElement);
        }
    }
    ;
}

var data1 = {
    rows: [[{
        title: 'Test',
        value: 1
    }, {
        title: 'Test2',
        value: 2
    }, {
        title: 'Test3',
        value: 3
    }, ], [{
        title: 'Test4',
        value: 4
    }, {
        title: 'Test5',
        value: 5
    }, ], [{
        title: 'Test6',
        value: 6
    }, {
        title: 'Test7',
        value: 7
    }, ]]
}

deleteKeyFromObject(data1);
console.log(data1);
1 голос
/ 07 мая 2020

Вероятно, лучше не изменять существующие объекты:

rows = rows.map(fields => {
    return fields.map(field => {
        return {...field, value: ''};
    })
});
0 голосов
/ 07 мая 2020

Вы можете использовать delete для явного удаления свойства и его значения. Карта не требуется:

var ob = {foo:'bar',fizz:'buzz'};
console.log(ob); // Object { foo: "bar", fizz: "buzz" }
delete ob.fizz;
console.log(ob); // Object { foo: "bar" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...