2017-04-20 4 views
0

Iは、以下の構造を有する同じ長さの2つのJavaScriptの配列を有する:inputValuesの項目スプリットアレイ - Javascriptの

var inputLabels = ["A", "A", "A", "B", "A", "A", "A", "B", "B", "B", "C"]; 
var inputValues = [5, 4, 6, 0.01, 7, 12, 2, 0.06, 0.02, 0.01, 98.7]; 

はinputLabelsにそのインデックスにある項目に対応します。

私が得るように、また、ユニークなラベル値の新しい配列を作成している間、私は、inputLabelsのラベル(A、B & C)に基づいて、配列の新しい配列にinputValuesを分割したい:

var splitLabels = ["A", "B", "C"]; 
var splitData = [ 
       [5, 4, 6, 7, 12, 2], 
       [0.01, 0.06, 0.02, 0.01], 
       [98.7] 
       ]; 

splitLabelsの各項目のインデックスは、splitValuesの正しい部分配列に対応します。

inputLabelsが3つ以上の一意の値(たとえば "A"、 "B"、 "C"、 "D"、 "E")を持つことができるように、 splitValuesのサブ配列

+3

あなたはこれまで何を試してみましたか? – evvels1

答えて

0

function groupData(labels, values) { 
 
    return labels.reduce(function(hash, lab, i) { // for each label lab 
 
    if(hash[lab])        // if there is an array for the values of this label 
 
     hash[lab].push(values[i]);    // push the according value into that array 
 
    else          // if there isn't an array for it 
 
     hash[lab] = [ values[i] ];    // then create one that initially contains the according value 
 
    return hash; 
 
    }, {}); 
 
} 
 

 
var inputLabels = ["A", "A", "A", "B", "A", "A", "A", "B", "B", "B", "C"]; 
 
var inputValues = [5, 4, 6, 0.01, 7, 12, 2, 0.06, 0.02, 0.01, 98.7]; 
 

 
console.log(groupData(inputLabels, inputValues));

機能groupDataはこの形式でオブジェクトを返します。

{ 
    "Label1": [ values of "Label1" ], 
    "Label2": [ values of "Label2" ], 
    // ... 
} 

私はあなたの希望の結果よりもはるかに編成されていると考えています。

0

Array#mapを使用して解決策が考えられます。

var inputLabels = ["A", "A", "A", "B", "A", "A", "A", "B", "B", "B", "C"], 
 
    inputValues = [5, 4, 6, 0.01, 7, 12, 2, 0.06, 0.02, 0.01, 98.7], 
 
    hash = [...new Set(inputLabels)], 
 
    res = hash.map(v => inputLabels.map((c,i) => c == v ? inputValues[i] : null).filter(z => z)); 
 
    
 
    console.log(JSON.stringify(hash), JSON.stringify(res));