1

ソート後に次のように表示される配列があります。

var arr = ["a", "a", "b", "b", "b", "b", "c", "c", "c"];


2"a"弦、4"b"弦、3"c"弦があります。 一致する値のみ

を含む、ループから一度に 1 つずつ返す、3 つの個別の配列を返そうとしています。したがって、最初の反復では、返される配列は として表示され、2 回目は として表示さ  れ、3 回目の反復では として表示されます。   ただし、これは事前定義された値の小さな配列であり、未知のサイズ、未知の要素、未知の数の同様の要素を持つ配列に対して同じ操作を実行できるアルゴリズム必要です。(そして、このコンテキストでは、配列は最初からすでにソートされていることに注意してください) newArr = ["a", "a"]newArr = ["b", "b", "b", "b"]newArr = ["c", "c", "c"]



これは、異常で誤った結果を表示している私のクレイジーなコードです。

var arr = ["a", "a", "b", "b", "b", "b", "c", "c", "c"];

for(var index = 0; index < arr.length; index++)
{
  var test = "";
  var newArr = []; // resets the new array upon each iteration
  var str = arr[index]; // initialized as the next unique index-value

  for(var i = index; i < arr.length; i++)
  {
    if(arr[i] == str)
    {
      newArr.push(arr[k]);
      test += arr[i] + " ";
    }
    else
    {
      index = i; // changing the outer loop variable
      break; // exiting the inner loop
    }
  } // end of inner loop

  window.alert(test);
  setValues(newArr);

} // end of outer loop

function setValues(arrSorted)
{
  var here = document.getElementById("here");

  for(var i = 0; i < arrSorted.length; i++)
  {
    here.innerHTML += arrSorted[i] + "&nbsp;";
  }

  here.innerHTML += "<br />";

} // end of setValues function
4

3 に答える 3

2
var arr = ["a", "a", "b", "b", "b", "b", "c", "c", "c"];
var arrays = {};
for (var i=0;i<arr.length;i++) {
  if (!arrays[arr[i]]) arrays[arr[i]] = [];
  arrays[arr[i]].push(arr[i]);
}

これはあなたに同等のものを与えるでしょう

arrays = {};
arrays['a'] = ['a','a'];
arrays['b'] = ['b','b','b','b','b'];
arrays['c'] = ['c','c','c'];
于 2012-06-05T22:11:00.743 に答える
1

このような関数を使用して、配列を複数の配列に分割できます。

function divide(arr) {

  var subArrays = [];
  var current = null;
  var subArray = null;

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] != current) {
      if (subArray != null) subArrays.push(subArray);
      current = arr[i];
      subArray = [];
    }
    subArray.push(arr[i]);
  }
  if (subArray != null) subArrays.push(subArray);
  return subArrays;
}

デモ: http: //jsfiddle.net/Guffa/d8CBD/

于 2012-06-05T22:17:16.583 に答える
1

これは私がそれを行う方法です:

var arr = ["a", "a", "b", "b", "b", "b", "c", "c", "c"];

var out = [], prev;
for (var i = 0, j = 0, len = arr.length; i < len; i++) {
    if (arr[i] !== prev || !out.length) {
        out[j++] = [prev = arr[i]];
    } else {
        out[j - 1].push(prev);
    }
}

//out -> [["a","a"],["b","b","b"],["c","c","c"]]

デモ

注:この|| !out.lengthチェックは、正しく始まる配列を処理するだけですundefinedが、そうでない場合は自由に削除してください。

于 2012-06-05T22:46:05.540 に答える