【问题标题】:Move key in object of object up (swap indexes)向上移动对象对象中的键(交换索引)
【发布时间】:2018-04-14 22:37:14
【问题描述】:

我正在处理一个对象对象。我需要将它作为一个对象保留,因为我正在使用一个 API,它要求我保持这种状态(这部分没有争议)。

这是我的对象的示例架构:

const obj = {
  1: { name: 'Initial Step 1', stepNumber: 1 },
  2: { name: 'Initial Step 2', stepNumber: 2 },
  3: { name: 'Initial Step 3', stepNumber: 3 },
}

我需要实现一个moveUp 函数,它将stepNumberobj 分别作为第一个和第二个参数。

这个moveUp 函数基本上需要将一个内部对象与它上面的对象交换。例如。 moveUp(2, obj) 应将obj 更改如下:

{
  1: { name: 'Initial Step 2', stepNumber: 1 },
  2: { name: 'Initial Step 1', stepNumber: 2 },
  3: { name: 'Initial Step 3', stepNumber: 3 },
}

感谢我构建的界面,stepNumber 永远不会等于 1

我应该如何实现我的moveUp函数?

我基本上需要这个:

export const moveUp = (stepNumber, obj) => {
    // I need help here
};

谢谢!

【问题讨论】:

  • Barry 如果你依赖这里的顺序,你会遇到问题。对象键不保持一致的顺序Here 对此进行了一些讨论。
  • 是否应该将“Initial Step 2”的步数设置为 2?
  • @Callam 这个 sn-p 应该做什么/显示什么? O.o 相关函数为空...
  • @espresso_coffee 我指出的输入和输出正是我想要的。
  • @Beau 我不依赖订单,我正在创建它。

标签: javascript object ecmascript-6 key


【解决方案1】:

您可以使用destructuring assignment 并调整stepNumber

function moveUp(object, key) {
    [object[key], object[key - 1]] = [object[key - 1], object[key]];
    object[key].stepNumber++;
    object[key - 1].stepNumber--;
}

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

moveUp(object, 2);

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

【讨论】:

    【解决方案2】:

    试试这个

    let _ = require('lodash');
    obj = {
        1: { name: 'Initial Step 1', stepNumber: 1 },
        2: { name: 'Initial Step 2', stepNumber: 2 },
        3: { name: 'Initial Step 3', stepNumber: 3 },
      }
    
    function moveUp(sn, objToUp){
        console.log(objToUp);
        let key =  _.findKey(obj,{stepNumber: sn} );
        let keys = Object.keys(obj);
        let keyIndex = _.indexOf(keys, key);
        if(keyIndex > 0){
            let tmp = obj[keys[keyIndex-1]];
            obj[keys[keyIndex-1]] = objToUp;
            obj[keys[keyIndex]] = tmp;
        }
        console.log(obj);
    }
    moveUp(2, obj['2']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多