当键是数字时,如何在JavaScript中对对象值进行排序?

时间:2012-07-24 11:38:57

标签: javascript arrays sorting object

让我说我有这么奇怪的代码:

var weirdo = {};
var ids = [10, 30, 11, 1, 4, 2];
var producers = ['Ford','Rover','BMW','Fiat','Renault','Mitsubishi'];
var n = producers.length;
for(var i=0; i<n; i++) {
    weirdo[ids[i]] = producers[i];
}
// unknown code ???

如何按值排序怪人?它不是数组而不是,我不能在填充怪人之前对生产者进行排序。

有什么想法吗?

哦,关系id&lt; =&gt;制片人非常重要!

3 个答案:

答案 0 :(得分:5)

您可以使用对象数组:

var items = [
  {id:10, producer:'Ford'},
  {id:30, producer:'Rover'},
  {id:11, producer:'BMW'},
  {id:1, producer:'Fiat'},
  {id:4, producer:'Renault'},
  {id:2, producer:'Mitsubishi'},
]

// or, starting from your two arrays:
var items = [];
for (var i=0; i<ids.length && i<producers.length; i++)
    items[i] = {id:ids[i], producer:producers[i]};

然后你可以sort那个数组by id:

items.sort(function(a, b){ return a.id-b.id; });

...并使用for循环迭代它。


另一个解决方案是迭代器数组,以正确的顺序遍历id&lt; - &gt;生成器对象(weirdo):

var weirdo = {"10":"Ford","30":"Rover",...};
var ids = Object.keys(weirdo); // if not already built somewhere

ids.sort(function(a,b){return a-b;}); // sort numeric
// loop:
for (var i=0; i<ids.length; i++) {
    var id=ids[i], producer=weirdo[id];
    ...
}

答案 1 :(得分:2)

简短的回答是对象按规格排序。对象的属性就是 - 属性。它们在您请求时提供,它们不是要在对象内移动的项目。

如何在检查时可视化对象完全取决于执行可视化的代理。例如,如果您要在Chrome中编写以下内容

console.log({ x: 1, a: 2 });

...它会按字母顺序显示参数。这不是对象固有的东西,而只是chrome实现的问题。

如果您愿意,请在Chrome中编写以下内容

for(key in { x: 1, a: 2 }) console.log(key);

...它会记录x,然后记录a,即按照添加顺序显示同一对象的属性。

当然,你可以确保按照各自属性名称的字母/数字顺序将属性添加到对象中,但这样就不会有任何意义,因为不能保证所有实现都会保留顺序。添加任何一个。

答案 2 :(得分:-1)

您是否尝试过使用Array.Sort?

http://jsfiddle.net/gRoberts/mXwdN/

var weirdo = {};
var producers = ['Ford','Rover','BMW','Fiat','Renault','Mitsubishi'];
producers.sort();
console.log(producers);
producers.map(function(item, index) {
    this[index] = item;
}, weirdo);
console.log(weirdo);

编辑:由于在我处理解决方案时问题正在更新,请根据更新的问题找到更新版本:

http://jsfiddle.net/gRoberts/mXwdN/1/

var weirdo = {};
var ids = [10, 30, 11, 1, 4, 2];
var producers = ['Ford','Rover','BMW','Fiat','Renault','Mitsubishi'];
ids.sort();
ids.map(function(item, index) {
    weirdo[item] = producers[index];
}, weirdo);
console.log(weirdo);​
​