2016-12-28 34 views
0

我有一个难以描述的问题。这是两个数组的故事。 我有一个数组包含50个对象。每个对象,我想调用它的特定属性"IDnumber"基于另一个阵列中的较新对象更新数组

第二阵列是一个具有包含所有提到的50个对象的"IDnumber"属性的5个变量,与具有一组10个IDnumbers每个变量:var1是第10个对象的IDnumbers,var2是也是该IDnumbers第二组等,直到第50个对象的ID号。

这是困难的地方。 如果我想在第一个数组中添加一个新对象,这样就会有51个对象,那么我想用第6个变量更新第2个数组,这个变量包含所有剩余对象的ID号(在这种情况下只是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等你陈述

您可以分割array1成10组,并把在array2这样

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个组,我可以通过它的[element]数来访问它的每个组。但如果我添加更多的对象,我将不得不手动调用这些组。我如何处理1个数组中的所有这些数组的故事,所以我不需要并且它会自动执行? – TheNuttyStudent

+0

嗨。我已经将所有东西都包装在一个函数中,所以当添加新对象时,可以调用它来重组第一个数组。所以基本上,每次添加新对象时都必须重新组合。如果你不想这样做,看看另一个答案,但要小心这个答案的副作用。始终追求功能的纯洁 – Dummy

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; }