gpt4 book ai didi

javascript - NodeJS如何加速这个数组创建功能

转载 作者:搜寻专家 更新时间:2023-11-01 00:48:28 25 4
gpt4 key购买 nike

很难给它一个好的标题来描述这是什么,但这是我想出的最好的。无论如何,这只是创建一副纸牌,然后移除底牌。性能至关重要,因为它需要对这种新牌组的创建、洗牌和底牌移除进行数千次迭代。

创建套牌的速度非常快,但底牌移除功能对性能有巨大影响,因为我找不到任何简单的方法来移除 JS 中的元素。

const suits = ['s', 'h', 'd', 'c'];
const remove = ['10s', '11s', '13h', '9c'];

var deck = mkDeck();
shuffle(deck)
rmvHole();

// Functions

function rmvHole() {
for (let i = 0; i < remove.length; i++) {
const key = Object.keys(deck).find(key => deck[key] === remove[i]);
deck[key] = null;
}
}

function mkDeck() {
let arr = [];
for (let s = 0; s < 4; s++) {
for (let i = 2; i < 15; i++) {
arr.push(i + suits[s]);
}
}
return arr;
}

function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
}
return a;
}

console.log(deck);
.as-console-wrapper { max-height: 100% !important; top: auto; }

最佳答案

因为 deck 应该是一个数组,你绝对不应该遍历它的 Object.keys - 相反,因为数组值都是基元,你可以识别使用 indexOfsplice 进行索引,或者将该数组索引处的项目设置为 null,如果这是您想要的:

function rmvHole() {
for (let i = 0, { length } = remove; i < length; i++) {
const index = deck.indexOf(remove[i]);
// deck.splice(index, 1);
// deck[index] = null;
}
}

(将索引设置为 null 实际上并没有从数组中删除元素,这就是为什么我认为你可能意味着你想要 splice )

const suits = ['s', 'h', 'd', 'c'];
const remove = ['10s', '11s', '13h', '9c'];

var deck = mkDeck();
shuffle(deck)
rmvHole();

// Functions

function rmvHole() {
for (let i = 0; i < remove.length; i++) {
const index = deck.indexOf(remove[i]);
deck[index] = null;
}
}

function mkDeck() {
let arr = [];
for (let s = 0; s < 4; s++) {
for (let i = 2; i < 15; i++) {
arr.push(i + suits[s]);
}
}
return arr;
}

function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
}
return a;
}

console.log(deck);
.as-console-wrapper {
max-height: 100% !important;
top: auto;
}

关于javascript - NodeJS如何加速这个数组创建功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55466808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com