【问题标题】:change order of properties in object (javascript) [duplicate]更改对象中属性的顺序(javascript)[重复]
【发布时间】:2017-04-27 19:56:38
【问题描述】:

有一个这样的对象数组:

    [{id: "58eeed338b115",  name: "Bob", avatar: "" },
{id: "58eeed338b115",  name: "Bob", avatar: "" }]

我需要更改属性的顺序:

    [{avatar: "",  name: "Bob",id: "58eeed338b115"},
{avatar: "",  name: "Bob",id: "58eeed338b115"} ]

在实际任务中我有大约 20 个 obj,如何更改顺序?用于?我不知道该怎么做。我想手动设置顺序,obj中的参数可以是10左右

【问题讨论】:

  • 属性在对象中没有排序。为什么需要这个?
  • @chazsolo 它们是按插入顺序排列的...除非它们是数字。
  • @DanielA.White 是的。但是,如果我假设正确,OP 不会以特定顺序手动插入它们。

标签: javascript arrays object


【解决方案1】:

const arr = [{id: "58eeed338b115",  name: "Bob", avatar: "" },
{id: "58eeed338b115",  name: "Bob", avatar: "" }]

const sortOrder = {'avatar': 1, 'id': 2, 'name': 3}



const res = arr.map(o => Object.assign({}, ...Object.keys(o).sort((a, b) => sortOrder[a] - sortOrder[b]).map(x => { return { [x]: o[x]}})))

console.log(JSON.stringify(res, null, 2))

【讨论】:

  • 我不需要反向,我需要手动设置顺序
  • 什么意思?更具体。
  • 例如我要设置:ID、AVATAR、NAME 或 ID、NAME、AVATR,而不是反向
  • @ЕгорКротенко 但是...您指定的顺序与原始顺序相反。所以... reverse 按您指定的顺序放置它。无论哪种方式,这个答案都表明您可以重新排序属性,您应该能够接受这个答案并通过将 .reverse 替换为您想要的顺序来应用您自己的顺序。
  • 不,我不需要反向,例如我想用 NAME 更改 ID...
【解决方案2】:

尝试:

const sortObj = ({id, name, avatar, ...more}) => ({avatar, name, id, ...more})

const objs = [...]
const objsSorted = objs.map(sortObj)

【讨论】:

    【解决方案3】:

    var sortObj = function sortObj(obj) {
        let keys = [];
        for (let key in obj) {
          if (obj.hasOwnProperty(key)) {
            keys.push(key);
          }
        }
        keys.sort();
        
        let newObj = {};
        for (let i = 0; i < keys.length; ++i) {
          newObj[keys[i]] = obj[keys[i]];
        }
        return newObj;
    };
    
    let arr = [{id: "58eeed338b115",  name: "Bob", avatar: "" },
    {id: "58eeed338b115",  name: "Bob", avatar: "" }];
    
    for (let i = 0; i < arr.length; ++i) {
      console.log(sortObj(arr[i]));
    }

    【讨论】:

    • 想解释一下否决票?
    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 2010-11-27
    • 2019-12-14
    • 2013-04-04
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多