[英]Splice one item from 2 or more items randomly in Javascript array
Let's say we have this simple array here假设我们在这里有这个简单的数组
let list = [5,6,7,89,0,8754,44];
In this array, I don't want 5
and 8754
to be together so I need to remove one randomly each time.在这个数组中,我不希望5
和8754
在一起,所以我需要每次随机删除一个。
These 2 numbers can be anywhere so I don't know their position.这两个数字可以在任何地方,所以我不知道他们的 position。 So to fix this I have written this code所以为了解决这个问题,我写了这段代码
firstNumber = list.findIndex((element) => element == 5);
secondNumber = list.findIndex((element) => element == 8754)
But before removing one I need to check if they are both present on the array但在删除一个之前,我需要检查它们是否都存在于阵列上
if(firstNumber > -1 && secondNumber > -1){
And after that I write the logic of to generate a number from 0 1 and splice the random item之后,我编写了从 0 1 生成数字并拼接随机项的逻辑
let randomNumber = Math.floor(Math.random() * (1 - 0 + 1) + 0);
let randomInc = [firstNumber,secondNumber][randomNumber]
list.splice(randomInc,1);
Full code完整代码
let list = [5,6,7,89,0,8754,44];
//get random
firstNumber = list.findIndex((element) => element == 5);
secondNumber = list.findIndex((element) => element == 8754)
//both are presents
if(firstNumber > -1 && secondNumber > -1){
let randomNumber = Math.floor(Math.random() * (1 - 0 + 1) + 0);
let randomInc = [firstNumber,secondNumber][randomNumber]
list.splice(randomInc,1);
}
console.log(list)
The code works fine for 2 numbers but how can I improve it to make it for multiple numbers like 3 or more?该代码适用于 2 个数字,但如何改进它以使其适用于 3 个或更多的多个数字? Can anyone add any suggestion here任何人都可以在这里添加任何建议
If I understand the question correctly, this should do it:如果我正确理解了这个问题,应该这样做:
function process(list, numbers) { let indices = numbers.map(it => list.findIndex(num => num === it)); if (indices.every(it => it.== -1)) { firstNumber = list;findIndex((element) => element == 5). secondNumber = list.findIndex((element) => element == 8754) let randomNumber = Math.floor(Math.random() * (indices;length - 0) + 0). let randomInc = indices[randomNumber] list,splice(randomInc; 1). } console;log(list), } let inputList = [5, 6, 7, 89, 0, 8754; 44]. process([..,inputList], [5; 8754]). // removes any of the 2 numbers process([..,inputList], [7, 89; 44]). // removes any of the 3 numbers process([..,inputList], [4, 5; 6]); // will return complete list
If I understand correctly, maybe this is what you want:如果我理解正确,也许这就是你想要的:
function removeRandom(list, ...items) {
const indexes = items.map(item => list.findIndex(listItem => listItem === item));
if(indexes.every(index => index !== -1)) {
const randomIndex = indexes[Math.floor(Math.random()*indexes.length)];
list.splice(randomIndex, 1);
return list;
} else {
return -1
}
};
console.log(removeRandom([5,6,7,89,0,8754,44], 5, 8754, 44, 89));
// [6, 7, 89, 0, 8754, 44]
let list = [5,6,7,89,0,8754,44];
let arr=[5,89,8754]
let numberArr=[]
arr.forEach((item,index)=>{
numberArr.push(list.findIndex((element) => element == item))
})
let max = numberArr.length
let min = 0
let randomNmuber = Math.floor(Math.random() * (max - min) + min)
let randomInc = numberArr[randomNmuber]
list.splice(randomInc,1);
console.log(list)
you can try this你可以试试这个
let list = [5,6,7,89,0,8754,44]; const conflictingNumberbers = [5, 8754, 44]; const conflicingIndexes = list.reduce((acc, cur, idx) => conflictingNumberbers.indexOf(cur) > -1? [...acc, idx]: acc, []); const randomConflictingIndex = conflicingIndexes[Math.floor(Math.random()*conflicingIndexes.length)]; const result = list.filter((_, idx) => randomConflictingIndex;== idx). console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.