0

これは少し混乱するかもしれませんし、それが可能かどうかはわかりませんが、助けていただければ幸いです。私は次の配列を持っています(リストの項目と数は変わる可能性があります、これは単なる例です):

var list_1 = ["A - 2" , "E - 5" , "C - 7"];
var list_2 = ["D - 2" , "A - 2" , "E - 3"];
var list_3 = ["C - 1" , "E - 8" , "A - 7"];

私の期待する出力は次のとおりです。

var final = ["A - 2" , "C - 1" , "D - 2" , "E - 3"];

私がやろうとしていること:

各配列アイテムを調べる方法を理解しようとしています。アイテムの先頭の文字が前の配列に存在するかどうかを確認し、アイテムの番号が前のアイテムよりも少ない場合は、'finalで置き換えます。 'リスト。

何かアイデアはありますか、それともこれは不可能ですか?

jQueryは受け入れ可能です

4

5 に答える 5

2
var list_1 = ["A - 2" , "E - 5" , "C - 7"];
var list_2 = ["D - 2" , "A - 2" , "E - 3"];
var list_3 = ["C - 1" , "E - 8" , "A - 7"];

まず、リストをマージします(3番目+ 2番目+最初):

var list = list_3.concat(list_2).concat(list_1);

各文字に最小の数字を入れるマップを作成します。

var final_map = {};

すべてのアイテムをループして、各アイテムを文字(parts[0])と数字(parts[1])に分割します。

指定された文字の現在の最小数を取得します。番号がない場合、または新しい番号が現在の最小番号よりも小さい場合は、マップを更新します。

list.forEach(function (item) {
  var parts = item.split(' - ');
  var current = final_map[parts[0]];

  if (!current || parts[1] < current) {
    final_map[parts[0]] = parts[1];
  }
});

最後に、マップを配列に変換します。

var final = [];
Object.keys(final_map).sort().forEach(function (key) {
  final.push(key + ' - ' + final_map[key]);
});
于 2012-06-12T19:56:46.867 に答える
0

アレイを手動で確認する必要があります。

var final = [];
$.each(list_1, function(i) { 
  // get each of your elements at index i. Ex list_1[i]
  // do the comparison, and push them to an final
  // possibly split the current element to match the letter and number
})
于 2012-06-12T19:50:53.017 に答える
0

さて、あなたはほとんど自分の質問に答えました。今必要なのは、人間が読めるアルゴリズムをJavaScriptに変更することだけです。for最大.length要素を含むリストを反復処理し、String.substringまたはregexpを使用してデータを分割し、オブジェクト内で見つかった最大数を保存します。ここで、文字はキーであり、数値は値です。次に、カスタム関数を指定して、このオブジェクトからさらに別のforループとそれで最終配列を作成します。sort

于 2012-06-12T19:51:57.953 に答える
0

キーが整数で、値が文字のリストになるハッシュテーブルを作成します。印刷するときよりも、値が以前に使用されていない限り、キー+値を確認するだけです。数値を最初に確認する独自のソート関数を作成することもできます

于 2012-06-12T19:52:53.140 に答える
0

ルックアップを使用して現在の値を保持し、配列を反復処理します。

リストをそのように再配置し、

var lists = [["A - 2" , "E - 5" , "C - 7"], 
             ["D - 2" , "A - 2" , "E - 3"], 
             ["C - 1" , "E - 8" , "A - 7"]];

これを使って、

var f = {}; 
for (var i = 0; i < lists.length; i++) { 
  for (var j = 0; j < lists[i].length; j++) { 
    var s = lists[i][j].split(' - '); 
    var ex = f[s[0]]; 
    if (!ex || ex > s[1]) 
      f[s[0]] = s[1];
  } 
}; 
var a = [];
for (var obj in f) {
  if (f.hasOwnProperty(obj)) { 
    a.push('' + obj + ' - ' + f[obj]);
  }
};

与える

["A - 2", "E - 3", "C - 1", "D - 2"]
于 2012-06-12T19:54:07.057 に答える