每次调用变量时更新变量值:JS中rankings数组首次调用后不更新如何解决
问题原因
你当前定义的rankings是静态数组,代码初始化阶段所有generateRankingValue就已经执行完毕生成了固定值,后续每次concat(rankings)都是复用首次生成的静态数据,自然不会更新数值。
修复方案
把rankings从静态数组改成返回数组的函数,每次调用时重新生成所有随机属性值,这种写法的优势是每次生成的rankings数组都是独立的新对象,不会出现不同版本的元数据引用同一个属性对象导致的意外联动修改问题。修改后的代码如下:
var generateRankingValue = (min, max) => { return Math.round(Math.random() * (max - min) + min); } // 改为函数,每次调用返回全新的rankings数组 var getRankings = () => [ { trait_type: "Level", value: 1, max_value: 99, }, { trait_type: "Strength", value: generateRankingValue(1, 5), max_value: 40, }, { trait_type: "Stamina", value: generateRankingValue(1, 5), max_value: 30, }, { trait_type: "Attack", value: generateRankingValue(1, 3), max_value: 50, }, { trait_type: "Defense", value: generateRankingValue(1, 3), max_value: 50, }, { display_type: "boost_number", trait_type: "Cubic Power", value: generateRankingValue(1, 10), max_value: 100, }, { display_type: "boost_percentage", trait_type: "Stamina Increase", value: generateRankingValue(1, 10), max_value: 50, }, ]; const addMetadata = (_dna, _edition) => { let dateTime = Date.now(); let tempMetadata = { dna: sha1(_dna.join("")), name: `#${_edition}`, description: description, image: `${baseUri}/${_edition}.png`, edition: _edition, date: dateTime, ...extraMetadata, // 调用函数获取全新生成的rankings数组 attributes: attributesList.concat(getRankings()), compiler: "CCompiler Engine", }; metadataList.push(tempMetadata); attributesList = []; };
内容的提问来源于stack exchange,提问作者greyBow
相关产品推荐
相关产品推荐

