如何使用函数为空对象实例化值?生成汽车对象时赋值遇阻求助
解决给空对象赋值生成随机汽车对象的问题
嘿,我看你在尝试用随机数从数组里取值生成汽车对象时卡壳了,这就帮你理顺思路!
首先,你已经定义了各个汽车属性的数组,接下来只需要生成每个数组的有效随机索引,然后把对应的值赋给空对象的属性就行。我把你的代码补全并解释一下:
完整可运行代码
var makes = ["BMW", "Audi", "Mercedez", "Range Rover", "Lexus"]; var models= ["M Series", "S Series", "AMG", "Explorer", "F Series"]; var years = [2003, 2017, 2018, 1993, 2006]; var colors = ["black", "red", "blue", "silver", "Red"]; var convertibles = [true, false]; // 生成每个数组的随机有效索引 // Math.random()返回0-1的随机数,乘以数组长度后取整,得到0到数组长度-1的索引 var randMake = Math.floor(Math.random() * makes.length); var randModel = Math.floor(Math.random() * models.length); var randYear = Math.floor(Math.random() * years.length); var randColor = Math.floor(Math.random() * colors.length); var randConvertible = Math.floor(Math.random() * convertibles.length); // 创建空的汽车对象 var car = {}; // 给空对象添加属性和对应随机值 car.make = makes[randMake]; car.model = models[randModel]; car.year = years[randYear]; car.color = colors[randColor]; // 这里给属性名起个更语义化的名字,方便理解 car.isConvertible = convertibles[randConvertible]; // 打印生成的汽车对象 console.log(car);
关键知识点
- 生成有效随机索引:一定要用
Math.floor(Math.random() * 数组长度),这样能保证索引不会超出数组的范围(数组索引从0开始,到数组长度-1结束),避免出现undefined的情况。 - 给空对象赋值的两种方式:
- 点语法(最常用):
car.make = 值,适合属性名是固定字符串的情况。 - 方括号语法:
car['make'] = 值,适合属性名是变量或者包含特殊字符的场景,比如var prop = 'make'; car[prop] = 值。
- 点语法(最常用):
更简洁的写法
如果不想先创建空对象再逐个赋值,也可以直接在创建对象时完成赋值,代码更紧凑:
var makes = ["BMW", "Audi", "Mercedez", "Range Rover", "Lexus"]; var models= ["M Series", "S Series", "AMG", "Explorer", "F Series"]; var years = [2003, 2017, 2018, 1993, 2006]; var colors = ["black", "red", "blue", "silver", "Red"]; var convertibles = [true, false]; var car = { make: makes[Math.floor(Math.random() * makes.length)], model: models[Math.floor(Math.random() * models.length)], year: years[Math.floor(Math.random() * years.length)], color: colors[Math.floor(Math.random() * colors.length)].toLowerCase(), // 统一颜色大小写 isConvertible: convertibles[Math.floor(Math.random() * convertibles.length)] }; console.log(car);
顺便提个小优化:你的colors数组里有"red"和"Red",可以用toLowerCase()或者toUpperCase()统一大小写,避免生成的对象里颜色大小写不一致的情况。
内容的提问来源于stack exchange,提问作者Vetements
相关产品推荐
相关产品推荐

