-2

私がそのような奇妙なコードを持っているとしましょう:

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 <=> プロデューサーは非常に重要です!

4

3 に答える 3

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]};

次に、その配列IDで並べ替えることができます。

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

...そして for ループで繰り返します。


weirdo別の解決策は、正しい順序でid<->producer オブジェクト ( ) をループするイテレータ配列です。

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];
    ...
}
于 2012-07-24T12:08:18.053 に答える
2

簡単に言えば、オブジェクトは仕様によって順序付けられていないということです。オブジェクトのプロパティはまさにそのプロパティです。オブジェクト内で移動するアイテムではありません。

検査時にオブジェクトがどのように視覚化されるかは、完全に視覚化を実行するエージェント次第です。たとえば、Chrome で次のように記述するとします。

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

...パラメータをアルファベット順に表示します。これはオブジェクトに固有のものではなく、単にクロムの実装の問題です。

代わりに、クロムで次のように記述します

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

... をログに記録しx、その後にを記録しますa。つまり、同じオブジェクトのプロパティを追加された順に表示します。

もちろん、それぞれのプロパティ名のアルファベット順/数字順でオブジェクトにプロパティを追加することを確認できますが、すべての実装がいずれかの追加順序を保持するという保証はないため、それはポイントを逃します。

于 2012-07-24T12:02:02.627 に答える
-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);​
​
于 2012-07-24T12:04:03.800 に答える