使用javascript对对象的内容进行排序

时间:2017-05-17 23:55:44

标签: javascript

如果我有一个看起来像的对象:

let object = {
  name1 : {
    number : .5,
    otherVar : 'something'
  }, 
  name2 : {
    number : .7,
    otherVar : 'text'
  },
  name3 : {
    number : -.1,
    otherVar : 'some words'
  }
};

我怎么能按数字值排序并得到一个数组:[name3,name1,name2]?

6 个答案:

答案 0 :(得分:2)

这是一个班轮:

Object.keys(object).map(key => object[key]).sort((a, b) => a.number - b.number)

答案 1 :(得分:2)

let sorted = Object.keys(obj).map(key => obj[key]).sort((a, b) => a.number - b.number);

<强>解释

  • Object.keys(obj)将返回一组键['name1', 'name2'...]
  • .map会将该数组转换为值数组
  • .sort接受比较函数并返回已排序的数组(请参阅documentation

建议:不要调用您的对象object:)

答案 2 :(得分:2)

这是另一个es6例子:

let object = {
  name1 : {
    number : .5,
    otherVar : 'something'
  }, 
  name2 : {
    number : .7,
    otherVar : 'text'
  },
  name3 : {
    number : -.1,
    otherVar : 'some words'
  }
};

let k = Object.keys(object).sort(((a, b) => object[a].number > object[b].number));
console.log(k);

答案 3 :(得分:1)

创建一个包含添加了名称的对象属性的数组:

var array = [];
for (var key in object) {
    object[key].name = key;
    array.push(object[key]);
}

然后按数字对该数组进行排序:

array.sort((a, b) => a.number - b.number);

然后从数组中获取名称:

var sortedNames = array.map(e => e.name);

完整演示:

&#13;
&#13;
let object = {
  name1 : {
    number : .5,
    otherVar : 'something'
  }, 
  name2 : {
    number : .7,
    otherVar : 'text'
  },
  name3 : {
    number : -.1,
    otherVar : 'some words'
  }
};

var array = [];
for (var key in object) {
    object[key].name = key;
    array.push(object[key]);
}
array.sort((a, b) => a.number - b.number);
var sortedNames = array.map(e => e.name);
console.log(sortedNames);
&#13;
&#13;
&#13;

答案 4 :(得分:0)

它应该做脏工作,首先你将对象平放到一个对象数组中,然后你创建自定义比较函数,最后排序,瞧!

var keys = Object.keys(object);

function compare(a,b) {
  if (object[a].number < object[b].number)
    return -1;
  if (object[a].number > object[b].number)
    return 1;
  return 0;
}
var res = keys.sort(compare);

答案 5 :(得分:0)

&#13;
&#13;
var items = [];
items = JSON.parse(object);
}); //will give you an array

function compare(a,b) {
  if (a.number < b.number)
    return -1;
  if (a.number > b.number)
    return 1;
  return 0;
}
items.sort(compare); //array will be sorted by number
&#13;
&#13;
&#13;