Преобразование объекта в другой объект

#javascript #node.js #object

#javascript #node.js #объект

Вопрос:

Кто-нибудь может помочь мне с этим объектом? Я собираюсь получить такой объект:

 NewImage: {
          sourceId: {
            S: "some_string"
          },
          ignored: {
            BOOL: false
          },
          stepFunctionArn: {
            S: "some_string"
          },
          certificate: {
            BOOL: true
          },
          infoNeeded: {
            L: [
              "Array"
            ]
          },
          queuesLinks: {
            M: [
              "Object"
            ]
          },
        }
 

Как я могу удалить эти «S», «BOOL» перед каждым значением? Мне нужен такой объект:

 NewImage: {
  sourceId: "some_string",
  ignored: false,
  stepFunctionArn: "some_string"
  ...
}
 

Мне нужно создать функцию, которая преобразует этот объект, как я объяснил выше.
Есть идеи?
Спасибо за помощь 🙂

Комментарии:

1. у вас есть только одно свойство в большинстве вложенных объектов?

2. Похоже, что queuesLinks должен быть преобразован в объект, но для этого потребуются некоторые имена свойств для значений. Что не так с использованием обычного JSON, похоже, кто-то пытался изобрести его заново.

3. это ответ потока dynamodb.

Ответ №1:

Просто возьмите значения из вложенных объектов.

 const
    data = { sourceId: { S: "some_string" }, ignored: { BOOL: false }, stepFunctionArn: { S: "some_string" }, certificate: { BOOL: true }, infoNeeded: { L: ["Array"] }, queuesLinks: { M: ["Object"] } },
    result = Object.fromEntries(Object
        .entries(data)
        .map(([k, o]) => [k, Object.values(o)[0]])
    );

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

Комментарии:

1. Пожалуйста, не могли бы вы объяснить, что происходит в строке .map()?

2. он принимает записи как пары ключ-значение и возвращает новый массив с ключом и первым значением из вложенного объекта.

3. Спасибо! Теперь это имеет смысл для меня.

Ответ №2:

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

 Object.keys(NewImage).forEach(key=>{
 NewImage[key]=NewImage[key][Object.keys(NewImage[key])[0]];
});
console.log(NewImage);
 

Ответ №3:

Если вам нужен новый объект с указанной структурой, вы можете попробовать это:

 const newObj = Object.keys(NewImage).reduce((curr, next) => {
  const key = Object.keys(NewImage[next])[0];
  curr[next] = NewImage[next][key];
  return curr; 
}, {})
 

Ответ №4:

Это другой подход, использующий метод уменьшения!

 const data = {
    sourceId: {
        S: "some_string"
    },
    ignored: {
        BOOL: false
    },
    stepFunctionArn: {
        S: "some_string"
    },
    certificate: {
        BOOL: true
    },
    infoNeeded: {
        L: [
            "Array"
        ]
    },
    queuesLinks: {
        M: [
            "Object"
        ]
    },
};
const newObject = Object.entries(data).reduce(function(accumulator, currentValue) {
  accumulator[currentValue[0]] = Object.values(currentValue[1])[0];

  return accumulator;
}, {});

console.log(newObject)