2017-08-08 42 views
2
var data = [ 
    { 
     id:1, 
     account_name:'Akshay Patil', 
     debit:111, 
     credit:'' 
    }, 
    { 
     id:2, 
     account_name:'Bharat Chavan', 
     debit:222, 
     credit:'' 
    }, 
    { 
     id:3, 
     account_name:'Chetan Kore', 
     debit:333, 
     credit:'' 
    }, 
    { 
     id:4, 
     account_name:'Dilip Patil', 
     debit:444, 
     credit:'' 
    }, 
    { 
     id:5, 
     account_name:'Eshawr Dange', 
     debit:555, 
     credit:'' 
    }, 
    { 
     id:6, 
     account_name:'farhan Khan', 
     credit:666, 
     debit:'' 
    }, 
    { 
     id:7, 
     account_name:'Ganesh Shine', 
     credit:777, 
     debit:'' 
    }, 
    { 
     id:8, 
     account_name:'Hemant Birje', 
     credit:888, 
     debit:'' 
    } 
] 

問題發生時對象從數組中刪除被生成的隨機數之後的時間被隨機數比陣列更大長度然後像錯誤無法讀取屬性。獲得一個隨機數(1〜6號等骰子)從陣列對象,然後從數組中刪除它

這是我main.s使用這個js IM拼接生成的隨機對象文件

function(){ 
user.wrapper.find('.randomMove').off('click').on('click', function(event){ 
     var dice = { 
      sides: 6, 
      roll: function() { 
      var randomNumber = Math.floor(Math.random() * this.sides) + 1; 
       return randomNumber; 
      } 
     } 
     var result = dice.roll(); 
     result--; 
     //setDataInTable(result);   
     user.data.splice(result,1); 
    }); 
    } 

,並設置爲表數據

+0

我猜你的實際的問題是洗牌數組,對不對?請參閱https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array – georg

+0

**您能否附上您編寫的代碼?謝謝。** – 2017-08-08 11:09:01

+0

函數setListeners(){ user.wrapper.find('。randomMove')。off('click')。on('click',function(event){ var dice = { sides:6 , roll:function(){ var randomNumber = Math.floor(Math.random()* this。邊)+ 1; return randomNumber; } } var result = dice.roll(); result--; setDataInTable(result); user.data.splice(result,1); }); } – suraj

回答

0

這應該工作

var len = data.length; 
var rand = Math.random() * (len - 0) + 0; 

var selected = data[rand]; 
data.splice(rand, 1) 
0

你應該產生隨機數根據數組長度而定。

var randomIndex = Math.floor(Math.random() * data.length); 
// Index 0 - first 
// Index (data.length-1) - last 

現在刪除隨機元素:

var element = data.splice(randomIndex, 1)[0]; 
console.log(element); 

之後,得到另一個隨機元素,你應該產生一個新的randomIndex並再次拼接。

+0

謝謝,但我不想根據數組長度。我有骰子滾筒根據這個我想要的解決方案 – suraj

0

首先,你需要找到的元素的索引中刪除:

var array = [1, 10, 100]; 
//edited to choose it random 
var selectedItem = array[Math.floor(Math.random()*array.length)]; 
var index = selectedItem; 

後使用拼接將其刪除:

if (index > -1) { 
    array.splice(index, 1); 
} 
0

我假設這是JavaScript的錯誤只在元素從數組中移除後發生。我猜你正在瀏覽列表並試圖拖曳內容。

發生了什麼事是這樣的: 你從8個元素長的數組開始。然後你刪除一個,使它長7個元素。然後,如果它選擇要刪除的元素8,則不能,因爲只剩下7個元素。這就是你如何得到錯誤信息。

使用此代碼來代替:

var data = [ 
 
    { 
 
     id:1, 
 
     account_name:'Akshay Patil', 
 
     debit:111, 
 
     credit:'' 
 
    }, 
 
    { 
 
     id:2, 
 
     account_name:'Bharat Chavan', 
 
     debit:222, 
 
     credit:'' 
 
    }, 
 
    { 
 
     id:3, 
 
     account_name:'Chetan Kore', 
 
     debit:333, 
 
     credit:'' 
 
    }, 
 
    { 
 
     id:4, 
 
     account_name:'Dilip Patil', 
 
     debit:444, 
 
     credit:'' 
 
    }, 
 
    { 
 
     id:5, 
 
     account_name:'Eshawr Dange', 
 
     debit:555, 
 
     credit:'' 
 
    }, 
 
    { 
 
     id:6, 
 
     account_name:'farhan Khan', 
 
     credit:666, 
 
     debit:'' 
 
    }, 
 
    { 
 
     id:7, 
 
     account_name:'Ganesh Shine', 
 
     credit:777, 
 
     debit:'' 
 
    }, 
 
    { 
 
     id:8, 
 
     account_name:'Hemant Birje', 
 
     credit:888, 
 
     debit:'' 
 
    } 
 
] 
 

 
function getRandomInt(min, max) { 
 
    return Math.floor(Math.random() * (max - min + 1)) + min; 
 
} 
 

 
function deleteRandom() { 
 
    data.splice(getRandomInt(0, data.length), 1); 
 
} 
 

 
console.log(data); 
 
deleteRandom(); 
 
console.log(data);

此代碼需要你的陣列,發現它有多長,然後刪除它知道是中的一個元素。爲了演示的目的,這個人在控制檯之前和之後記錄數組。

0

var data = [ 
 
    { 
 
     id:1, 
 
     account_name:'Akshay Patil', 
 
    }, 
 
    { 
 
     id:2, 
 
     account_name:'Bharat Chavan', 
 
    }, 
 
    { 
 
     id:3, 
 
     account_name:'Chetan Kore', 
 
    }, 
 
    { 
 
     id:4, 
 
     account_name:'Dilip Patil', 
 
    } 
 
] 
 

 
function removeItem(){ 
 
debugger; 
 
    var lengthOfArray = data.length; 
 
    var spilceId = Math.floor(Math.random() * lengthOfArray); 
 
    
 
    if(lengthOfArray > 0){ 
 
     data.splice(spilceId,1) 
 
    } 
 
    // or remove data based on index of id 
 
    console.log(data); 
 
}
<button onclick='removeItem()'>remove</button>

相關問題