SPQRInc
SPQRInc

Reputation: 198

Remove 'value' key from nested array of objects

I got an array like this:

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 },
  ]
]

Now I'd like to unset the key value in each nested object.

At the moment I am doing:

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

Do you see a better way to do this?

Upvotes: 1

Views: 58

Answers (3)

Vinay Jadhav
Vinay Jadhav

Reputation: 364

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);

Upvotes: 2

Ashish Ranjan
Ashish Ranjan

Reputation: 12960

Probably not modifying existing objects could be a better practice:

rows = rows.map(fields => {
    return fields.map(field => {
        return {...field, value: ''};
    })
});

Upvotes: 1

Gavin
Gavin

Reputation: 2365

You can use delete to explicitly remove a property and its value. No map needed:

var ob = {foo:'bar',fizz:'buzz'};
console.log(ob); // Object { foo: "bar", fizz: "buzz" }
delete ob.fizz;
console.log(ob); // Object { foo: "bar" }

Upvotes: 0

Related Questions