让我说我有这么奇怪的代码:
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;制片人非常重要!
答案 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]};
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);