簡體   English   中英

出現唯一值時 Javascript 停止推送

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM