2016-12-28 7 views
0

私は説明が難しい質問があります。それは2つの配列の話です。 私は50個のオブジェクトを保持する1つの配列を持っています。オブジェクトごとに、その特定のプロパティ"IDnumber"を呼び出したいと思います。別の配列の新しいオブジェクトに基づいて配列を更新する

二番目の配列は、各変数が10 IDnumbersのセットを有する述べ50個のオブジェクトの"IDnumber"プロパティのすべてを含む5つの変数を有するものである:var1は、第10のオブジェクトのIDnumbersある、var2をのIDnumbersあります2番目のセットなど、50番目のオブジェクトのID番号までです。

これは難しいところです。 最初の配列に新しいオブジェクトを追加して51個のオブジェクトが存在するようにするには、残りのオブジェクトのIDnumbersを含む6番目の変数を2番目の配列に更新する必要があります(この場合は1)。 array2の長さをarray1の長さに依存させたい。

var arr1 = [], obj = {"IDNumber": "1"}; 
//this is an example array, all objects have the same ID here, but not in my real array 
for (var i = 0; i < 51; i++) { 
    arr1.push(obj); 
} 

var var1 = [arr1[0]["IDNumber"], arr1[1]["IDNumber"], arr1[2]["IDNumber"], arr1[3]["IDNumber"], arr1[4]["IDNumber"], arr1[5]["IDNumber"], arr1[6]["IDNumber"], arr1[7]["IDNumber"], arr1[8]["IDNumber"], arr1[9]["IDNumber"]]; 
//the other remaining possible variables. 

var arr2 = [var1, ...]; //No clue as how to take that on 

どうすればよいですか?そのような新しい変数を使って自身を更新する配列を作成するにはどうすればよいですか?各変数には最大10個のオブジェクトのID番号が必要です。

+3

特別な操作は必要ありません。 'arr2 [0]'は 'var1'が参照するのと同じ配列への参照であり、配列のコピーではありません。配列を変更すると、両方の場所に表示されます。 – Barmar

+1

'var1.push(something)'を実行すると、これは 'arr2 [0]'の最後に表示されます。 – Barmar

答えて

2

array1にオブジェクトの配列が含まれているとします。もう一つは、あなたが関数を作成できますが

を述べたように、配列の配列を含むarray2は、各サブ配列の長さは10を持っているあなたは10のグループにarray1を分割し、この

function slice10(arraysOfObject) { 
    var array2 = []; 
    var leftOver = arraysOfObject.length % 10; 
    var groupsOfTen = (arraysOfObject.length - leftOver)/10; 
    for (var i = 0; i < groupsOfTen; i++) { 
     array2.push([]); 
     for (var j = i*10; j < i*10 + 10; j++) 
      array2[i].push(arraysOfObject[j]["IDNumber"]); 
    } 

    //now take care of the leftover 
    if (leftOver > 0) { 
     array2.push([]); 
     for (var i = groupsOfTen*10; i < arraysOfObject.length; i++) 
      array2[array2.length-1].push(arraysOfObject[i]["IDNumber"]); 
    } 
    return array2; 
} 
+0

大きな助け、ありがとう。だから、 'array2'は' array1'の配列で、10個のグループに分けることができます。そして、それぞれの要素の[要素]番号でアクセスすることができます。しかし、さらにオブジェクトを追加すると、それらのグループを手動で呼び出す必要があります。どのように私はこれらの配列のすべてのグループを1つの配列の中に入れておく必要がないので、それは自動的になるでしょうか? – TheNuttyStudent

+0

こんにちは。関数内のすべてをラップしたので、新しいオブジェクトが追加されたときに最初の配列を再編成するために呼び出すことができます。基本的には、新しいオブジェクトを追加するたびに再グループ化する必要があります。あなたがそれをしたくない場合は、他の答えを見てください。ただし、その答えの副作用には注意してください。機能の純度を常に追求する – Dummy

1

ようarray2に置くことができています2つの異なるデータ構造にオブジェクトを追加することに対応し、第1の50個のオブジェクトを追加するためにもその機能を使用するには:

function addObject(arr1, arr2, obj) { 
 
    if (arr1.length % 10 == 0) arr2.push([]); 
 
    arr1.push(obj); 
 
    arr2[arr2.length-1].push(obj.IDNumber); 
 
} 
 

 
var arr1 = [], arr2 = []; 
 
for (var i = 0; i < 51; i++) { 
 
    addObject(arr1, arr2, {"IDNumber": i + 1000}); // some dummy ID value 
 
} 
 

 
console.log(arr2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題