2017-01-07 3 views
-8

私は最初の要素をJavaScriptで複数の配列をマージする方法

var arr1=["cat","blue","1"]; 
var arr2=["cat","red","1"]; 
var arr3=["cat","yellow","1"]; 
var arr4=["dog","blue","1"]; 
var arr5=["dog","red","1"]; 

のような配列を持っています。 。

は私が期待して、私が最初のような何かをするだろう

var arr1=["cat","blue,red,yellow","1"]; 
var arr2=["dog","blue,red","1"]; 
+2

なぜその結果が期待できますか?あなたが私たちに示したことから、あなたは何もしていませんでした... – Li357

+1

次にコードを書く必要があります。 –

+0

私は通常、Pythonでこれを行うために "set"関数を設定したいと思いますが、javascriptでは、通常は各配列の要素を反復し、それらをオブジェクトのキーとして設定して(重複を削除するため)配列...他の誰かがより良い解決策を持っていますか? – deweyredman

答えて

0

。あなたが持っているすべての配列を持つセットを作成すると、重複が削除されます。 他のユーザーの回答を修正するには:

// Have a single array to loop through. 
var mainArray = []; 
mainArray.push(["cat", "blue", "1"]); 
mainArray.push(["cat", "red", "1"]); 
mainArray.push(["cat", "yellow", "1"]); 
mainArray.push(["dog", "blue", "1"]); 
mainArray.push(["dog", "red", "1"]); 

// Result Object. 
var resultObject = {}; 
for (var i = 0; i < mainArray.length; i++) { 
    if (!resultObject[mainArray[i][0]]) { 
    resultObject[mainArray[i][0]] = []; 
    } 
    resultObject[mainArray[i][0]] = resultObject[mainArray[i][0]].concat(mainArray[i]); 

} 



for (var key in resultObject) { 
    if (resultObject.hasOwnProperty(key)) { 
    resultObject[key] = new Set(resultObject[key]) 
    resultObject[key] = Array.from(resultObject[key]) 
    } 
} 
console.log(resultObject) 
+0

ブラウザのサポートは何ですか? –

+1

は、IEを除いてかなり正当に見えますが、これはエッジで置き換えられています。 – deweyredman

+0

ごめんなさい! ':P' –

0

ような結果:

// Have a single array to loop through. 
 
var mainArray = []; 
 
mainArray.push(["cat", "blue", "1"]); 
 
mainArray.push(["cat", "red", "1"]); 
 
mainArray.push(["cat", "yellow", "1"]); 
 
mainArray.push(["dog", "blue", "1"]); 
 
mainArray.push(["dog", "red", "1"]); 
 

 
// Result Object. 
 
var resultObject = {}; 
 
for (var i = 0; i < mainArray.length; i++) { 
 
    for (var j = 1; j < mainArray[i].length; j++) { 
 
    if (!resultObject[mainArray[i][0]]) 
 
     resultObject[mainArray[i][0]] = []; 
 
    if (resultObject[mainArray[i][0]].indexOf(mainArray[i][j]) == -1) 
 
     resultObject[mainArray[i][0]].push(mainArray[i][j]); 
 
    } 
 
} 
 

 
// Check it out. 
 
console.log(resultObject);

は私の結果オブジェクトの形式は次のようになります。

{ 
    "cat": [ 
    "blue", 
    "1", 
    "red", 
    "yellow" 
    ], 
    "dog": [ 
    "blue", 
    "1", 
    "red" 
    ] 
} 

コメントに質問がある場合は、私に尋ねることがあります。あなたはまだあなたの元の形式でそれをしたい場合は、して行うことができます。これは、あなたに与え

var myObj = { 
 
    "cat": [ 
 
    "blue", 
 
    "1", 
 
    "red", 
 
    "yellow" 
 
    ], 
 
    "dog": [ 
 
    "blue", 
 
    "1", 
 
    "red" 
 
    ] 
 
}; 
 
var myArr = []; 
 
for (var key in myObj) { 
 
    myArr.push([key, myObj[key].join(",").replace(",1", ""), "1"]); 
 
} 
 
console.log(myArr);

:あなたはSetデータ構造を探している

[ 
    [ 
    "cat", "blue,red,yellow", "1" 
    ], 
    [ 
    "dog", "blue,red", "1" 
    ] 
] 
+0

ありがとうございました! –

関連する問題