在对象的对象中移动键(交换索引)

时间:2017-11-02 11:56:51

标签: javascript object ecmascript-6 key

我正在处理一个物体对象。我需要将它作为一个对象保留,因为我使用的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
};

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以destructuring assignment并调整$sql = "insert into tbl_user (name, age, groupname) values (?, ?, ?)"; $this-> db-> query($sql,array('codeigniter, 35, 'Group 1'));



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




答案 1 :(得分:0)

试试这个

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