1

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?

2
  • 1
    Better in what sense? Time complexity or something? Commented May 7, 2020 at 13:36
  • 3
    Don't use .map for side-effects. Commented May 7, 2020 at 13:37

3 Answers 3

2

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

Sign up to request clarification or add additional context in comments.

Comments

1

Probably not modifying existing objects could be a better practice:

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

Comments

0

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" }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.