JavaScript-如何拥有第三个“子变量”

JavaScript-如何拥有第三个“子变量”,javascript,html,variables,random-sample,Javascript,Html,Variables,Random Sample,好的,我忘记了链接到列表中已存在的单个变量的变量列表的名称,但请看一下: function Models(Make) { var cars = { "Acura": ['Integra', 'NSX', 'RSX', ], "BMW": ['M3', ], "Buick": ['Regal', ], "Cadillac": ['CTS', ], "Honda": ['Accord', 'Civic', 'CR

好的,我忘记了链接到列表中已存在的单个变量的变量列表的名称,但请看一下:

function Models(Make) {
    var cars = {
        "Acura": ['Integra', 'NSX', 'RSX', ],
        "BMW": ['M3', ],
        "Buick": ['Regal', ],
        "Cadillac": ['CTS', ],
        "Honda": ['Accord', 'Civic', 'CR-Z', 'Prelude', ],
        "Mazda": ['3', 'MX-5', 'MX-6', 'RX-7', 'RX-8', ],
        "Mini": ['Cooper', ],
        "Nissan": ['240SX', '350Z', 'Fairlady', 'GT-R', 's13', 's14', 's15', ],
        "Toyota": ['Celica', 'MR2', 'Supra', ],
    };
    var holder = cars[Make]
    var Model = holder[Math.floor(Math.random() * holder.length)];
    return Model;
}

function main() {
    var Makes = [
            'Acura',
            'BMW',
            'Buick',
            'Cadillac',
            'Honda',
            'Mazda',
            'Mini',
            'Nissan',
            'Toyota',
    ];
    var Make = Makes[Math.floor(Math.random() * Makes.length)];
    var Model = Models(Make);
    var Out = Make + " " + Model;
    return Out;
}

document.write(main());
我想在车型之后添加第三个类,如Mini Cooper S或Honda Civic Del Sol,我如何才能最好地做到这一点?

您的cars对象包含许多属性,这些属性都是数组,这些数组都是索引的,包含字符串

如果要在模型中存储多个字符串,则必须将其更改为数组或对象:

var cars = {
    "Acura": [
        {
            base: 'Integra'
            submodals: ['S', 'Coupe', 'Si']
        },
        {
            base: 'NSX',
            submodels: ['A', 'B', 'C']
        },
        // ...
    ]
}
cars对象包含许多属性,这些属性都是数组,这些数组被索引,包含字符串

如果要在模型中存储多个字符串,则必须将其更改为数组或对象:

var cars = {
    "Acura": [
        {
            base: 'Integra'
            submodals: ['S', 'Coupe', 'Si']
        },
        {
            base: 'NSX',
            submodels: ['A', 'B', 'C']
        },
        // ...
    ]
}

我将编写一个函数,可以将任意深度嵌套的对象作为参数。然后像这样构造它:

var cars = {
    "Acura": {
        "Integra": ['S', 'Coupe', 'Si'],
        "NSX": "",
        "RSX": ""
    },
    "BMW": ['M3'],
    "Buick": ['Regal'],
    "Cadillac": ['CTS'],
    "Honda": {
        "Accord": "",
        "Civic": ["Del Sol"],
        "CR-Z": "",
        "Prelude": ""
    },
    "Mazda": ['3', 'MX-5', 'MX-6', 'RX-7', 'RX-8'],
    "Mini": {
        "Cooper": ["S"]
    },
    "Nissan": ['240SX', '350Z', 'Fairlady', 'GT-R', 's13', 's14', 's15'],
    "Toyota": ['Celica', 'MR2', 'Supra']
};
// (and notice: no trailing commas!)
然后可以递归选择随机模型:

function main() {
    return getRandom(cars).join(" ");
}
function getRandom(o) {
    if (o instanceof Array)
        return o.slice(~~(Math.random()*o.length), 1); // a random item in an array
    // else
    var props = Object.keys(o),
        r = props[ ~~(Math.random()*props.length) ],
        p = o[r];
    if (typeof p == "object") {
        var res = getRandom(p); // recurse
        res.unshift(r);
        return res;
    } // else
    return [ r ]; // an array literal with the random key
}

我将编写一个函数,可以将任意深度嵌套的对象作为参数。然后像这样构造它:

var cars = {
    "Acura": {
        "Integra": ['S', 'Coupe', 'Si'],
        "NSX": "",
        "RSX": ""
    },
    "BMW": ['M3'],
    "Buick": ['Regal'],
    "Cadillac": ['CTS'],
    "Honda": {
        "Accord": "",
        "Civic": ["Del Sol"],
        "CR-Z": "",
        "Prelude": ""
    },
    "Mazda": ['3', 'MX-5', 'MX-6', 'RX-7', 'RX-8'],
    "Mini": {
        "Cooper": ["S"]
    },
    "Nissan": ['240SX', '350Z', 'Fairlady', 'GT-R', 's13', 's14', 's15'],
    "Toyota": ['Celica', 'MR2', 'Supra']
};
// (and notice: no trailing commas!)
然后可以递归选择随机模型:

function main() {
    return getRandom(cars).join(" ");
}
function getRandom(o) {
    if (o instanceof Array)
        return o.slice(~~(Math.random()*o.length), 1); // a random item in an array
    // else
    var props = Object.keys(o),
        r = props[ ~~(Math.random()*props.length) ],
        p = o[r];
    if (typeof p == "object") {
        var res = getRandom(p); // recurse
        res.unshift(r);
        return res;
    } // else
    return [ r ]; // an array literal with the random key
}

你在搜索术语属性吗?你在搜索术语属性吗?在我看来,这有点过于复杂了。为什么不再次使用对象呢?但是如何利用子模型呢?我怎么称呼他们?@Bergi-绝对可能。这完全取决于Garret希望数据的表示方式。在我看来,这有点过于复杂了。为什么不再次使用对象呢?但是如何利用子模型呢?我怎么称呼他们?@Bergi-绝对可能。这完全取决于Garret希望如何表示数据。