[英]Javascript stop push when unique value occur
我用 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 個唯一值
我不知道該怎么做,也不知道使用 while 還是 for 循環更好。
任何的想法?
在填充二維數組的循環中,將數組發送到檢查函數,該函數確定是否存在 3 個唯一元素作為單個數組中的第一個元素。 這是檢查函數的代碼,如果 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));
這實現了真正的推送:
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);
但是,不再可能直接訪問 yourarray
您可以使用一個對象將每個第一個數字存儲為屬性,並在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);
您可以實現一個函數,該函數將第一列的編號作為屬性存儲在對象中,如果該對象中不存在該編號,則增加一個計數器。如果計數器等於 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++;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.