我使用while循环填充了一个二维数组,但是当第一列包含3个不同的唯一值时,我需要停止推送。
开头是这样的
var maxunique;
var i = 0;
while (countunique(arr) != maxunique) {
// my code that push data into array
arr[i].push(RandomNumber(1,8));
arr[i].push(i+1);
i++;
}
function countunique(arr)
{
// function here
}
function RandomNumber(min,max)
{
return Math.floor(Math.random()*(max-min+1)+min);
}
返回该值
arr: [ [ 4, 1 ],
[ 7, 2 ],
[ 5, 3 ],
[ 5, 4 ],
[ 3, 5 ],
[ 1, 6 ],
[ 7, 7 ],
[ 8, 8 ],
[ 5, 9 ],
[ 5, 10 ] ]
关于预期结果的想法是
arr: [ [ 4, 1 ],
[ 7, 2 ],
[ 5, 3 ] ]
你可以看到推送在前5个之后被中断,这是数组中的3个唯一值
我不知道该怎么做,而且我不知道用一段时间还是用于循环是否更好。
任何想法?
答案 0 :(得分:1)
在填充2D数组的循环中,将数组发送到检查函数,该函数确定是否存在3个唯一元素作为单个数组中的第一个元素。以下是check函数的代码,如果3个唯一元素尚未存在,则返回true,一旦找到3个唯一元素,则返回false。
var a = []; //;
var i = 0;
while (check(a)) {
a[i]=[];
a[i].push(RandomNumber(1, 42));
a[i].push(i + 1);
i++;
}
function RandomNumber(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
function check(arr) {
var length = arr.length;
var tmp = [];
for (var j = 0; j < length; j++) {
if (tmp.indexOf(arr[j][0]) === -1) {
tmp.push(arr[j][0]);
}
if (tmp.length === 3) {
return false;
}
}
return true;
}
console.log('test: ', a);
console.log('check: ', check(a));
答案 1 :(得分:0)
这实现了真正的推动:
var yourarray={
arr:[],
push:function(obj){
for(a=0;a<this.obj.length){
let count=0;
for(i=0;i<this.arr.length;i++){
if(obj[a]!=this.arr[i][a]){
count++;
if(count==3){
break;
}
}
}
}
this.arr.push(obj);
};
};
现在你可以做到:
yourarray.push([0,1,2]);
并访问它:
alert(yourarray.arr);
然而,直接访问yourar是不可能的
答案 2 :(得分:0)
您可以使用一个对象将每个第一个数字存储为属性,并在while
循环的每个迭代中检查该对象中的任何值是否等于3.如果是,则可以从循环中断开。我使用随机数作为第一个数字。
var ar = [];
var obj = {}
while (true) {
var firstNum = parseInt(Math.random() * 5) + 1;
ar.push([firstNum, 1]);
obj[firstNum] = (obj[firstNum] || 0) + 1;
var stop = Object.keys(obj).find(function(e) {
return obj[e] == 3;
});
if (stop) break;
}
console.log(obj);
console.log(ar);
&#13;
答案 3 :(得分:0)
您可以实现一个函数,该函数将第一列的编号存储为对象中的属性,如果该对象中不存在该编号,则递增计数器。如果计数器等于3,则有3个唯一元素,然后停止数组推送并退出循环。
这是一个示例代码。
var arr = ['-15, 1',
'-15, 2' ,
'2,3' ,
'2, 4' ,
'2, 5',
'77, 6','22,3' ];
function unique(array) {
var arr = [],x,y,obj = {},count = 0,arr1;
for (i = 0; i < array.length ; i++) {
arr1 = array[i].split(',');
x = arr1[0] * 1;
y = arr1[1] * 1;
if (count === 3) {
break;
}
array.push([x,y]);
if (!obj[x]) {
obj[x] = 1;
count++;
}
}
}