Удалить ключ: пара значений из вложенных объектов - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть этот объект:

const myObject = {
  myNestedObject1: {
    key1: "key1",
    key2: "key2",
    key3: "key3"
  },
  myNestedObject2: {
    key1: "key1",
    key2: "key2",
    key3: "key3"
  },
  myNestedObject3: {
    key1: "key1",
    key2: "key2",
    key3: "key3"
  }
}

Я хочу получить новый похожий объект, но без пары ключ-значение key2: "key2" и без изменения исходного.

const myObject = {
  myNestedObject1: {
    key1: "key1",
    key3: "key3"
  },
  myNestedObject2: {
    key1: "key1",
    key3: "key3"
  },
  myNestedObject3: {
    key1: "key1",
    key3: "key3"
  }
}

Есть ли короткий и простой способ сделать это? Лода sh может быть?

Спасибо!


Как я и просил, вот что я пытаюсь:

const myObject = {
  myNestedObject1: {
    key1: "key1",
    key2: "key2",
    key3: "key3",
  },
  myNestedObject2: {
    key1: "key1",
    key2: "key2",
    key3: "key3",
  },
  myNestedObject3: {
    key1: "key1",
    key2: "key2",
    key3: "key3",
  },
};

 result = _.transform(
  Object.assign({}, myObject),
  (acc, value, key) => {
    delete value["key2"]

    acc[key] = value;
  },
  {}
);

Который производит нужный объект, но мутирует оригинал.

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Вы можете просто l oop через объект и удалить свойство объекта:

const myObject = {
  myNestedObject1: {
    key1: "key1",
    key2: "key2",
    key3: "key3",
  },
  myNestedObject2: {
    key1: "key1",
    key2: "key2",
    key3: "key3",
  },
  myNestedObject3: {
    key1: "key1",
    key2: "key2",
    key3: "key3",
  },
};
const result = JSON.parse(JSON.stringify(myObject)); //make a shallow copy of the object
for(let o in result){
  delete result[o]['key2'];
}
console.log(result);
1 голос
/ 19 апреля 2020

Вы можете сделать это, используя Object.entries(), Object.fromEntries() и Array.prototype.map().

const myObject = {myNestedObject1: {key1: "key1",key2: "key2",key3: "key3"}, myNestedObject2: {key1: "key1",key2: "key2",key3: "key3"}, myNestedObject3: {key1: "key1",key2: "key2",key3: "key3"}};

const res = Object.fromEntries(Object.entries(myObject).map(([key, value]) => {
   const {key2, ...rest} = value; // Get all the keys except key2 at ...rest
   return [key, rest];
}));

console.log(res);
.as-console-wrapper {min-height: 100% !important; top: 0;}

Обновление

Здесь я предлагаю альтернативный подход с использованием reduce.

const myObject = {myNestedObject1: {key1: "key1",key2: "key2",key3: "key3"}, myNestedObject2: {key1: "key1",key2: "key2",key3: "key3"}, myNestedObject3: {key1: "key1",key2: "key2",key3: "key3"}};

const res = Object.entries(myObject).reduce((acc, [key, value]) => {
	const {key2, ...rest} = value;
	return {...acc, [key]: rest}
}, {});

console.log(res);
.as-console-wrapper {min-height: 100% !important; top: 0;}
...