我有一個二維數組,每個維中有任意數量的元素,所以它是[m] [n]數組,但第二維長度(n
)是可變的。查找數組不工作的交集?
第二維中的每個元素都包含一個數字,並且在所有維中只會存在一個數字。
因此,例如,該陣列可以是:
[
[
126,
131,
138,
139,
140,
143
],
[
126,
201
]
]
記住m
可以> 2.
這裏是我的代碼:
var theArray = [
[126, 131, 138, 139, 140, 143],
[126, 201]
];
for(var i = 0; i < theArray.length; i++) // loop through each array of numbers
{
$.each(theArray[i], function(index, value) // loop through all of the numbers in this array
{
var nextArray = (i+1<theArray.length?theArray[i+1]:theArray[0]);
if($.inArray(value, nextArray) == -1) // if this number is not in the next array
{
console.log("removing index: " + index + ", value: " + value);
theArray[i].splice(index, 1); // remove the number from the array
}
});
}
console.log(theArray);
輸出是這:
removing index: 1, value: 131
removing index: 2, value: 139
removing index: 3, value: 143
removing index: 4, value: undefined
removing index: 5, value: undefined
removing index: 1, value: 201
Array
[
[
126,
138,
140,
],
[
126
]
]
的jsfiddle:http://jsfiddle.net/hDL8K/
正如你所看到的,它幾乎作品,但它無法刪除兩個值。
我認爲這可能與index
在foreach
循環中增加每個循環和數組的大小減少,因爲元素被刪除,但我不知道。
爲什麼這不起作用,我該如何解決?
修改你通過迭代往往不能奏效的陣列,因爲當你拼接的元素出來的它,其餘元素的所有索引都會下移。 – Barmar
嗨Nate,我添加了一個不會修改原始數組的解決方案。 –