删除带有键的对象的对象中的键并减少尾随对象的键

Bar*_*yle 2 javascript object ecmascript-6

这很难用语言解释,所以让我向您展示我所拥有的内容并从那里开始工作。

我有以下对象:

{
  1: { name: 'Initial Step 1', stepNumber: 1 },
  2: { name: 'Initial Step 2', stepNumber: 2 },
  3: { name: 'Initial Step 3', stepNumber: 3 },
  4: { name: 'Initial Step 4', stepNumber: 4 },
}
Run Code Online (Sandbox Code Playgroud)

我想为此步骤执行删除功能,然后减少尾随键,以便得到以下结果:

{
  1: { name: 'Initial Step 1', stepNumber: 1 },
  2: { name: 'Initial Step 3', stepNumber: 2 },
  3: { name: 'Initial Step 4', stepNumber: 3 },
};
Run Code Online (Sandbox Code Playgroud)

我只是不确定实现我的deleteStep功能的最佳方法。

我已经将其实现如下:

export const deleteStep = (stepNumber, steps) => {
    // What should I do here?
    return steps;
};
Run Code Online (Sandbox Code Playgroud)

谢谢!

Nin*_*olz 5

您可以删除实际的键并检查是否存在更多键,然后创建一个新属性并删除旧的引用。

function deleteAndShift(object, key) {
    delete object[key];
    while (++key in object) {
        object[key].stepNumber--;
        object[key - 1] = object[key];
        delete object[key];
    }
}

var object = { 1: { name: 'Initial Step 1', stepNumber: 1 }, 2: { name: 'Initial Step 2', stepNumber: 2 }, 3: { name: 'Initial Step 3', stepNumber: 3 }, 4: { name: 'Initial Step 4', stepNumber: 4 } };

deleteAndShift(object, 2);

console.log(object);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)